Expressões lambda em Python com map, reduce e filter

Matheus Budkewicz
horaDeCodar
Published in
6 min readAug 30, 2018

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

  1. Definimos a função com a palavra lambda
  2. Após definir a função os parâmetros devem ser inseridos
  3. Colocamos : após os parâmetros
  4. Inserimos a lógica da função
  5. 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:

  1. Iniciando na lib pandas
  2. Iniciando com NumPy
  3. Webscraping com Python

--

--