Expressões Lambda
Este é o último capítulo para introdução à programação utilizando Python, vamos fechar o aprendizado com um tipo diferente de função: as expressões lambdas!
Para compreender este post é essencial que você tenha compreendido antes o assunto do capítulo anterior: funções.
Todas as características de uma função lambda são muito parecidas com as funções comuns que já vimos, com exceção de duas coisas: elas não possuem uma definição em código, ou seja, são declaradas como variáveis e não possuem um def
próprio; e elas são funções de uma linha, que funcionam como se houvesse a instrução return
antes do comando.
A função acima é uma função de soma normal, por ser uma função de uma linha podemos transformá-la em uma função lambda, ou em uma expressão lambda. Para isso, utilize o comando lambda conforme código:
Notem que a sintaxe é um pouco diferente, utilizamos a palavra reservada lambda
para declarar o início da expressão, depois disso, inserimos os parâmetros separados por vírgula. Por fim, colocamos o corpo da expressão.
Lembrando que o corpo da expressão sempre deve conter apenas uma linha de comando e ela funciona como se houvesse uma instrução de return
antes dessa linha.
Portanto as duas funções de soma são definições diferentes para a mesma função:
Também podemos ter uma função lambda sem parâmetros, quando for o caso, basta omitirmos a declaração de parâmetros normalmente:
Na prática essa função não faz tanto sentido, mas é um bom exemplo para entendermos o que está acontecendo. Nesse caso criamos uma função chamada obter_valor
que sempre retorna o número cinco. A definição padrão desta função ficaria da seguinte maneira:
Perceba que um dos pontos fortes de expressões lambda é sua síntese, ela são uma forma rápida de definir funções simples.
Mas e para funções sem retorno? -Nenhum problema!
Veja que estamos utilizando uma função lambda que não possui retorno e nem parâmetros! Mas tudo funcionará corretamente.
Talvez você estranhe um pouco, afinal, eu havia escrito antes que as expressões lambda funcionam como se houvesse um return
antes da instrução e a função print
não gera retornos. Então como ele entende?
Na prática você pode obter o valor de retorno da função print
, mas ele será um valor do tipo None
! Portanto, a mesma sintaxe de lambda continua funcionando normalmente.
Utilização
Ok, entendi o conceito, mas para o que isso serve? Agora vem a parte mais complicada desta lição, existem funções que podem receber outras funções por parâmetro!
Sim, você não leu errado, uma função recebe como parâmetro outra função. Estes são os exemplos onde as expressões lambda são mais utilizadas.
Vamos fazer um exercício utilizando os conceitos que já sabemos e depois refazê-lo utilizando expressões lambda!
Vamos declarar uma lista com diversos números diferentes, depois disso, copiaremos apenas os números pares para uma segunda lista e o exibiremos no console. Tranquilo, certo?
Utilizamos um laço de repetição para fazer a filtragem da lista que contém todos os números para uma nova lista que contenha somente os números pares.
Neste laço de repetição obtemos os números um por um, verificamos se ele é par ou não e caso seja, adicionamos ele à lista de pares.
Este comportamento de filtro em uma lista é bastante comum, por conta disso, a linguagem oferece um recurso para simplificar esta implementação. Esse recurso é a função filter
!
Esta função recebe dois parâmetros: um deles é a lista que vai ser filtrada, claro e o outro parâmetro é a função que realiza o filtro da lista!
Essa função de filtro deve possuir apenas um parâmetro (do mesmo tipo de cada elemento da lista) e deve retornar um boolean
.
Dessa forma, todas as listas, de qualquer tipo, podem utilizar a mesma função filter
.
No nosso caso, temos uma lista de números, portanto nossa função deve receber um número e retornar um valor lógico, na prática, ela é a mesma comparação que já fizemos na implementação anterior: numero % 2 == 0
, veja como fazemos a mesma coisa utilizando o filter:
Transformamos todo nosso laço de repetição com um desvio condicional em uma única instrução! Legal né?
O filter
não é a única função capaz de realizar este tipo de operação, mas é um bom exemplo para você entender o poder das expressões lambda!
Vamos Praticar
Faça um programa que escreva "Minha primeira função", esta escrita deve ser realizada a partir da chamada de uma função que foi declarada como uma expressão lambda.
Faça um programa que solicite o nome do usuário e a idade do usuário, depois disso exiba a mensagem: "{nome} possui {idade} anos.". Esta mensagem deve ser escrita em uma função lambda.
Faça um programa que solicite dois números ao usuário e exiba a multiplicação deles. A multiplicação deve ser calculada em uma função lambda.
Faça um programa que solicite cinco números ao usuário, depois disso, exiba apenas os números maiores do que 10. Utilize a função
filter
para fazer isso.Faça um programa que solicite dez números ao usuário, depois disso, exiba todos números pares e só então exiba todos os números ímpares. Utilize a função
filter
para fazer isso.
Atenção
Last updated
Was this helpful?