Expressões lambda em Python com map, reduce e filter
uma introdução ao conceito das funções anônimas, e utilizações deste recurso com map(), reduce() e filter().
Estou trazendo esse tópico hoje pois ele realmente é muito importante na nossa jornada de exploração das bibliotecas e códigos alheios.
Estamos lá entendendo todo o código, e do nada aparece uma função lambda, quando não estamos acostumados aparece um nó na cabeça e uma dúvida: o que aconteceu aqui?
Talvez pela sua sintaxe simples e resumida, por fazer muito com pouco, este recurso tem a habilidade secreta de nos confundir, mas depois desta leitura você estará apto a compreender as expressões lambda com facilidade e não sofrer mais por isso.
Obs: eu já fui vítima muitas vezes desta situação. :(
Ei você leitor! Criei um novo blog para os meus conteúdos, pois o Medium mesmo sendo uma excelente plataforma, me limitava em alguns recursos, que acredito que podem atrapalhar seu aprendizado/leitura…
Você pode acessar cliquando aqui!
Obrigado pela atenção, e boa leitura! :)
Conheça nosso canal no YouTube, com cursos gratuitos de qualidade e vídeos semanais, para acessar o canal clique aqui!
Repositório do artigo:
Confira todo o código deste artigo aqui!
Lembrando que usei o Jupyter Notebook para produzir, quer instalar ele também? confere aqui!
O que são expressões lambda?
São funções anônimas que podem ser criadas com a palavra-chave lambda. Elas podem ser utilizadas sempre, ou quase sempre, que funções sejam necessárias em seu código.
Porém, estas expressões são restritas a uma única linha ( sem gambiarras :) ).
Outra característica, e a mais notável, é que sua sintaxe é muito mais curta do que uma função normal em Python.
Um ponto importante é que estas funções possuem um return implícito, ou seja, toda função lambda retornará o resultado final da operação.
Hello World nas funções lambda
Antes de mais nada, vamos por a mão na massa e já executar uma função lambda!
O que acabou de acontecer?
Perceba que definimos a função lambda na primeira sentença, atribuímos a função a uma variável e por fim executamos a função com os dois argumentos necessários para ela.
Vamos entender agora como construiremos nossas funções
Sintaxe da função lambda
O passo a passo para formação de uma função lambda
- Definimos a função com a palavra lambda
- Após definir a função os parâmetros devem ser inseridos
- Colocamos : após os parâmetros
- Inserimos a lógica da função
- Podemos definir uma variável para a função lambda ( opcional )
Definir a variável é opcional
Como dito antes, podemos fazer uma função lambda sem a utilização de variável.
Assim, ela vai ser executada após ser definida, confira a sintaxe da função lambda soma sem variável:
Nós envolvemos tanto a função, quanto os parâmetros entre parênteses, deste modo ela não vai precisar estar numa variável. Em outras linguagens temos funções anônimas que também seguem este padrão para serem ‘autoexecutadas’ sem precisar a chamada.
Diferença de uma função normal
Vamos fazer agora um rápido comparativo entre função lambda e função normal:
As diferenças são:
- Não precisamos do def para definir
- Não precisamos do return
- Podemos formar a função lambda e executar na mesma linha
O real poder das funções lambda
Agora que vimos como ela é construída e como pode ser utilizada, vamos ver aonde elas realmente se sobressaem.
Em conjunto de outras funções como map, reduce e filter lambda mostra toda sua utilidade, vamos ver os exemplos:
lambda com map:
A função map() serve para aplicarmos uma função a cada um dos elementos passado em lista como argumento a ela.
Observe a sintaxe:
Agora vamos observar alguns casos utilizando a função lambda para nos auxiliar
No exemplo acima usamos uma lista de números, e aplicamos uma função lambda em x, que seria cada um dos números presentes na lista.
Assim é retornado o dobro deles com a operação: x*2, e como a operação irá nos retornar um map object utilizamos o metodo list para voltar a ter um array.
Podemos abstrair mais:
Veja que podemos passar a lista diretamente na função map, sem ter que criar uma variável:
Inserimos o array diretamente como argumento, assim reduzimos mais ainda o código.
map com dicionários
Podemos iterar dicionários com map também, confira o exemplo:
No exemplo acima verificamos quais contas possuem mais de 1000 reais, a função lambda retornou os booleanos para cada uma das contas.
lambda com reduce:
reduce() outra função nativa do python, ela vai aplicar uma função em todos os valores passados em forma de lista, e retornar apenas um valor.
Sintaxe de reduce:
Curiosidade: reduce faz parte da lib functools, ou seja, precisamos importar esta biblioteca antes de utilizá-la. A função foi ‘dropada’ do core quando Python passou para a versão 3.
Vamos observar como podemos utilizar reduce():
No exemplo acima vimos a soma de todos os elementos de uma lista, que foi passada diretamente como argumento para a função reduce.
A função lambda executou a soma de cada um dos elementos, fazendo reduce retornar 10.
Determinando maior número da lista com reduce():
Outro caso para o reduce seria eleger o maior número de uma lista, confira:
Usamos uma condicional if nesta função lambda.
O if funciona da seguinte maneira: depois dos parâmetros x e y, colocamos o resultado que satisfaz a condição de if no lado esquerdo, e após o else o resultado que desejamos se a condição for falsa.
lambda com filter:
Com o nome autoexplicativo, a função filter() filtra os elementos passados na função, de acordo com a função passada como primeiro argumento.
Sintaxe de filter:
filter se parece muito com as outras em questão de argumentos, função para aplicar e lista de elementos.
Vamos ver como podemos utilizar filter:
Neste exemplo vimos como retornar uma lista de valores pares com o auxílio de filter e lambda.
Agora veremos outra situação, retornar os números menores que 0 de uma lista:
Utilizamos o método range, que nos gerou uma lista de números de -5 a 4, pois o último argumento de range não é incluído, que no caso é o número 5.
Conclusão
Vimos o que são e como construir uma função lambda, desde a sua sintaxe até a comparação com uma função normal.
Apresentamos alguns casos de uso, e vimos que não precisamos definir ela por uma variável.
Depois aplicamos ela em três metodos muito conhecidos do Python map, reduce e filter.
Observamos em detalhes como cada um deles funcionam:
- map(): aplicar uma função em cada um dos elementos de uma lista;
- reduce(): aplicar uma função nos elementos da lista, reduzindo a um elemento só;
- filter(): filtrar elementos de uma lista por meio de uma função;
Agora quando nos depararmos com uma função lambda em um código de terceiros, vamos conseguir interpretar o que está acontecendo naquela linha e também caso você queira aplicar em um código seu estará apto!
Obrigado por ler até o final e nos vemos por aí! :)
Tópicos que você pode gostar: