Neste guia completo, você irá explorar o universo das funções lambda em Python, desde a sua sintaxe básica até as diversas aplicações práticas, acompanhadas de exemplos de código.
Em Python, as lambdas são funções anônimas, caracterizadas por sua sintaxe enxuta e versatilidade, podendo ser combinadas com outras funções nativas da linguagem. Ao concluir este tutorial, você terá domínio sobre a criação de funções lambda e saberá discernir quando seu uso é mais apropriado do que o de funções Python convencionais.
Vamos começar!
Funções Lambda em Python: Sintaxe e Ilustrações
A estrutura geral para a definição de uma função lambda em Python é a seguinte:
lambda parâmetro(s): valor de retorno
Na estrutura acima:
- A palavra-chave
lambdainicia a definição da função, seguida por um ou mais parâmetros que a função receberá. - Os parâmetros e o valor de retorno são separados por dois pontos.
💡 É crucial lembrar que o valor de retorno de uma função lambda deve ser o resultado de uma expressão avaliada em uma única linha de código. Os exemplos a seguir ajudarão a esclarecer esse conceito.
Exemplos Práticos de Funções Lambda
A melhor forma de internalizar o conceito de funções lambda é convertendo funções Python regulares para o formato lambda.
👩🏽💻 Sinta-se à vontade para testar o código em um ambiente Python REPL ou no editor Python online do etechpt.com.
#1. Analisemos a função square(), que aceita um número (num) e retorna seu quadrado.
def square(num):
return num*num
Você pode invocar a função com diferentes argumentos para verificar seu funcionamento:
>>> square(9) 81 >>> square(12) 144
Podemos associar essa expressão lambda a uma variável, como square1, para tornar a definição mais compacta: square1 = lambda num: num*num. Contudo, sendo as lambdas funções anônimas, é recomendável evitar atribuí-las a variáveis.
Na função square(), num é o parâmetro, e num*num é o valor de retorno. Com isso, podemos traduzir a função para o formato lambda e executá-la diretamente:
>>> (lambda num: num*num)(2) 4
Este é um exemplo do conceito de Expressão de Função Invocada Imediatamente, onde a função é chamada logo após sua definição.
#2. Agora, vamos transformar a função add(), que recebe dois números (num1 e num2) e retorna sua soma.
def add(num1,num2):
return num1 + num2
Vamos testar a função add() com diferentes pares de números:
>>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18
Neste caso, num1 e num2 são os parâmetros, e num1 + num2 é o valor de retorno.
>>> (lambda num1, num2: num1 + num2)(3,7) 10
Funções em Python também podem ter parâmetros com valores padrão. Vamos modificar a função add() e definir o valor padrão de num2 para 10.
def add(num1, num2=10):
return num1 + num2
Nas seguintes chamadas:
- Na primeira chamada,
num1é 1 enum2é 3, e o resultado é 4. - Se apenas um argumento for fornecido, o valor padrão de
num2(10) será usado. Por exemplo, ao chamaradd(7), o resultado é 17.
>>> add(1,3) 4 >>> add(7) 17
Ao usar funções que aceitam valores padrão como expressões lambda, é possível definir esses valores diretamente na definição dos parâmetros.
>>> (lambda num1, num2 = 10: num1 + num2)(1) 11
Quando Usar Funções Lambda em Python?
Agora que você já tem uma base sobre as funções lambda, veja alguns cenários onde elas são mais adequadas:
- Quando você precisa de uma função cuja expressão de retorno seja concisa, de uma única linha, e que não precise ser referenciada em outros pontos do mesmo módulo.
- Em conjunto com funções como
map(),filter()ereduce(). - Para personalizar a ordenação de estruturas de dados em Python, como listas e dicionários.
Funções Lambda com Funções Nativas
1. Lambda com map()
A função map() aplica uma função a cada elemento de um iterável, gerando um novo iterável:
Vamos criar uma lista de números e usar map() para gerar uma nova lista contendo o quadrado de cada número. Aqui, usamos uma função lambda para definir a operação de elevar ao quadrado.
>>> nums = [4,5,6,9] >>> list(map(lambda num:num*num,nums)) [16, 25, 36, 81]
Como a função map() retorna um objeto do tipo map, ele é convertido para uma lista.
▶️ Consulte este guia sobre a função map() em Python.
2. Lambda com filter()
Inicialmente, definimos uma lista de números chamada nums:
>>> nums = [4,5,6,9]
Suponha que você queira extrair apenas os números ímpares dessa lista.
A função filter() é ideal para isso. Ela recebe uma condição e um iterável e retorna um novo iterável contendo apenas os elementos que satisfazem a condição.
Para filtrar os números pares, mantendo apenas os ímpares, a expressão lambda deve ser lambda num: num%2!=0. O operador % calcula o resto da divisão por 2.
num%2!=0éTruepara números ímpares enum%2!=0éFalsepara números pares.
>>> nums = [4,5,6,9] >>> list(filter(lambda num:num%2!=0,nums)) [5, 9]
3. Lambda com reduce()
A função reduce() recebe um iterável e uma função e reduz iterativamente os elementos aplicando a função.

Para usar reduce(), é necessário importá-la do módulo functools:
>>> from functools import reduce
Utilizaremos reduce() para calcular a soma de todos os números da lista nums. A função lambda lambda num1,num2:num1+num2 define a operação de soma.
A operação de redução se dará da seguinte forma: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24, onde f é a operação de soma, definida pela lambda.
>>> from functools import reduce >>> nums = [4,5,6,9] >>> reduce(lambda num1,num2:num1+num2,nums) 24
Personalização de Ordenação com Funções Lambda
Além de usar lambdas com funções nativas como map(), filter() e reduce(), você também pode utilizá-las para personalizar métodos de ordenação.

1. Ordenando Listas em Python
Ao trabalhar com listas, é comum a necessidade de ordená-las de acordo com critérios específicos. Para ordenar a lista no mesmo local, pode-se usar o método sort(). Se você precisa de uma cópia ordenada da lista, utilize sorted().
A sintaxe da função sorted() é sorted(iterable, key=…, reverse= True | False).
O parâmetro key personaliza a ordenação e o parâmetro reverse define se a ordem será crescente (False, padrão) ou decrescente (True).
A ordenação padrão de listas de números e strings é em ordem crescente e alfabética, respectivamente. No entanto, é possível usar critérios customizados.
Considere a lista de frutas a seguir. Vamos ordená-la com base no número de ocorrências da letra ‘p’, em ordem decrescente.
>>> fruits = ['apple','pineapple','grapes','mango']
Nesse caso, vamos usar o parâmetro key. Strings em Python são iteráveis e podemos usar o método .count() para contar o número de ocorrências de um caractere. Definimos key como lambda x:x.count('p') para ordenar com base no número de ‘p’ em cada string.
>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']
Neste exemplo:
- O critério de ordenação é o número de ocorrências da letra ‘p’, definido por uma função lambda.
- O parâmetro
reversesendoTruegarante a ordem decrescente.
Na lista, ‘pineapple’ tem 3 ocorrências de ‘p’, ‘apple’ e ‘grapes’ têm 2 e 1, respectivamente, e ‘mango’ não tem nenhuma.
Entendendo a Ordenação Estável
Vamos analisar outro exemplo, usando a mesma lógica de ordenação e uma nova lista de frutas. Agora, ‘p’ aparece duas vezes em ‘apple’ e uma vez em ‘grapes’, e não aparece em ‘mango’ e ‘melon’.
>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']
Na saída, ‘mango’ aparece antes de ‘melon’, mesmo que ambos não tenham ‘p’. Isso acontece porque sorted() executa uma ordenação estável. Se dois elementos tiverem o mesmo valor para a chave de ordenação, a ordem relativa original é preservada.
Como um exercício, inverta a posição de ‘mango’ e ‘melon’ na lista original, rode novamente a ordenação e observe a saída.
▶️ Para saber mais sobre ordenação de listas em Python, consulte este guia.
2. Ordenando um Dicionário Python
Você também pode utilizar lambdas para ordenar dicionários. Considere o dicionário price_dict, que mapeia itens aos seus preços.
>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }
Para obter os pares chave-valor de um dicionário como uma lista de tuplas, use o método .items():
>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])
Em Python, iteráveis como listas e tuplas usam indexação baseada em zero. O primeiro item está no índice 0, o segundo no índice 1, e assim por diante.
Nosso objetivo é ordenar os itens pelo valor, ou seja, pelo preço. Em cada tupla de price_dict_items, o preço está no índice 1. Definimos a chave como lambda x:x[1] para que a ordenação se baseie no preço.
>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}
Na saída, os itens estão em ordem crescente de preço: começando com ‘Candy’ (preço 3) e terminando com ‘Honey’ (preço 15).
▶️ Explore este guia completo para saber como ordenar dicionários Python por chave e valor.
Conclusão
E aqui está! Você aprendeu a definir funções lambda e usá-las de forma eficaz com outras funções nativas do Python. Aqui está um resumo das principais conclusões:
- Lambdas são funções anônimas que aceitam vários argumentos e retornam um valor; a expressão que gera este valor deve estar em uma única linha de código. Elas são úteis para definir funções pequenas e concisas.
- Use a sintaxe
lambda parâmetro(s): valor de retornopara definir uma função lambda. - Algumas aplicações comuns são em conjunto com
map(),filter()ereduce(), e como o parâmetrokeypara personalizar a ordenação de iteráveis.
Em seguida, aprenda como executar a divisão inteira em Python.