Dentro do ecossistema Python, as funções lambda são um dos aspectos de aparência mais exótica, especialmente para quem está começando a aprender sobre a linguagem de programação. Afinal, o que tem de especial em uma função lambda? As funções lambda são como funções normais ou não? E quando devo utilizá-las?
Neste artigo, vamos abordar em detalhes estas e outras dúvidas comuns sobre função lambda em Python. Vamos entender o que é de fato uma função lambda, conhecer como podemos utilizá-la em Python e em que momentos vamos precisar aplicá-la diretamente no nosso código. Vamos lá!
O que é uma função lambda?
Uma função lambda é uma função definida em uma única linha, geralmente contendo uma lógica relativamente simples. Como essas funções são frequentemente criadas para servir de argumentos a outras funções, sem que sejam armazenadas em variáveis, também são frequentemente chamadas de “função sem nome” ou “função anônima”.
Funções lambda não são um conceito exclusivo de Python. Na realidade, o termo “função lambda” tem sua origem no cálculo lambda, um ramo da matemática que lida com funções recursivas e que possui grande afinidade com a área de programação em geral – em particular, com a chamada programação funcional.
Funções lambda na programação funcional
Diferentemente da programação orientada a objetos, onde modelamos nosso problema através de objetos que possuem métodos e atributos, na programação funcional as funções é que estão em destaque. Neste paradigma, as funções podem ser atribuídas a variáveis, passadas como argumentos e retornadas por outras funções.
Na programação funcional, as funções lambda permitem expressar funções pequenas e descartáveis, que não precisam ser formalmente definidas. Assim, são perfeitas para operações rápidas, como passar uma função como argumento de outra.
Python é uma linguagem de programação funcional?
O fato de Python possuir funções lambda pode levantar a questão: afinal, Python é uma linguagem funcional? Na realidade, Python é uma linguagem multiparadigma, ou seja, podemos utilizá-la como se fosse uma linguagem puramente orientada a objetos, uma linguagem puramente funcional ou ainda uma mistura de ambos – que é a forma mais comum de utilizá-la.
O que é a função lambda em Python?
Em Python, uma função lambda é uma maneira de escrever uma função em uma única expressão, sem a necessidade de defini-la explicitamente. Ela começa com a palavra-chave lambda
, seguida de seus argumentos separados por vírgula ( ,
). A expressão a ser calculada aparece após dois-pontos ( :
) . Um exemplo simples: lambda x: x + 2
.
Uma vez definida, podemos assinalar uma função lambda para uma variável e chamá-la como qualquer outra função. No exemplo abaixo, criamos a função lambda soma
, que aceita dois argumentos (x
e y
) e retorna a soma dos dois:
soma = lambda x, y: x + y
print(soma(5, 3))
# output: 8
TestarNeste exemplo, acabamos usando a variável soma
para nos referirmos à função lambda. Mas, conforme explicado anteriormente, a forma mais comum de utilizar funções lambda é passando-as diretamente como argumento de outras funções, sem a necessidade de assinalá-las para uma variável.
O que é uma função anônima em Python?
Uma função anônima é simplesmente outra forma de chamarmos uma função lambda em Python. Portanto, “função lambda” e “função anônima” são sinônimos.
Para que serve uma função lambda em Python?
Funções lambda servem para simplificar o código e torná-lo mais legível, em especial quando trabalhamos com funções que aceitam outras funções como um de seus argumentos.
Vejamos o exemplo prático da função sorted
abaixo, que ordena sequências. A função sorted
aceita o parâmetro key
, que é uma função contendo a lógica de ordenamento a ser usada:
minha_lista = [('maçã', 2), ('banana', 1), ('laranja', 3)]
minha_lista_ordenada = sorted(minha_lista, key=lambda x: x[1])
print(minha_lista_ordenada)
# output: [('banana', 1), ('maçã', 2), ('laranja', 3)]
TestarNo caso acima, a função sorted
utilizou a lógica descrita pela função lambda para ordenar os elementos de minha_lista
. A função lambda toma cada tupla (x
) como argumento e retorna o segundo elemento da tupla (x[1]
). Assim, a lista de tuplas é ordenada pelo número de forma ascendente.
Criando funções em Python
Agora que aprendemos a usar funções lambda no nosso código, vamos descrever e comparar todas as formas que possuímos para criar funções em Python.
Como criar uma função em Python usando def
Para definir uma função em Python, usamos a palavra-chave def
seguida do seu nome. Entre parênteses, definimos o nome e a quantidade de parâmetros. O corpo da função é indicado por uma indentação de 4 espaços e pode conter quantas linhas for necessário para desempenhar a lógica da função.
Um exemplo clássico seria:
def multiplicar(x, y):
"""Multiplica dois números."""
resultado = x * y
return resultado
print(multiplicar(2, 3))
# output: 6
TestarComo criar funções lambda em Python
Comparado com funções tradicionais, funções lambda são muito mais curtas e concisas. Aqui está o mesmo exemplo de multiplicação utilizando uma função lambda:
multiplicar = lambda x, y: x * y
print(multiplicar(2, 3))
# output: 6
TestarComo chamar uma função lambda em Python
Para chamar uma função lambda, usamos a variável à qual atribuímos a expressão lambda. Neste quesito, a função é chamada exatamente da mesma forma que uma função “tradicional”, definida com def
.
No exemplo acima, multiplicar(2, 3)
chama a função lambda que faz a multiplicação.
Qual a diferença entre uma função lambda e uma função criada com def
?
Funções lambda são breves, geralmente utilizadas uma única vez ou passadas como argumentos de função. Nestes casos, pode ser exagero definir uma função tradicional.
O lado negativo é que funções lambda podem possuir uma única expressão em seu corpo. Funções definidas com def
, por outro lado, podem incluir lógicas muito mais complexas, descritas em diversas linhas com condicionais, loops e os demais mecanismos da linguagem Python.
Como usar lambda em Python?
Agora que conhecemos as funções lambda em Python com profundidade, vamos ver alguns exemplos práticos onde podemos aplicá-las.
Usar uma função lambda para ordenar uma lista
Para ordenar uma lista, a função sorted
pode ser combinada com uma função lambda para definir um critério de ordenação customizado. Isso permite que elementos “incomparáveis”, como números e strings, ordenem-se de acordo com uma lógica qualquer.
No exemplo abaixo, a função lambda faz com que os strings da lista mista se ordenem de acordo com o número de caracteres, permitindo a ordenação junto aos demais números da lista:
lista_mista = [3, 'texto', 1.1, 'a', 25]
lista_ordenada = sorted(
lista_mista,
key=lambda x: len(x) if isinstance(x, str) else x
)
print(lista_ordenada)
# output: ['a', 1.1, 3, 'texto', 25]
TestarUsar uma função lambda para ordenar um dicionário
Se tentarmos passar um dicionário de Python para a função sorted
, ele será ordenado pelas suas chaves. Se, no lugar disso, quisermos ordená-lo pelos seus valores, podemos passar as tuplas de pares chave-valor para a função sorted
, junto a uma função lambda que indica a lógica de ordenamento:
notas = {'Ana': 9, 'Beto': 7, 'Carlos': 8}
notas_ordenadas = sorted(
notas.items(),
key=lambda tupla: tupla[1]
)
print(notas_ordenadas)
# output: [('Beto', 7), ('Carlos', 8), ('Ana', 9)]
TestarNa função lambda acima, a variável tupla
representa cada tupla de par chave-valor do dicionário, e a lógica tupla[1]
indica que o segundo elemento dessa tupla (o valor de cada par chave-valor) deve ser usada para o ordenamento.
Usar uma função lambda com as funções map
e filter
A função map
pode ser utilizada junto a uma função lambda para aplicar a operação a cada item de uma lista:
numeros = [1, 2, 3]
duplicados = list(map(lambda x: x * 2, numeros))
print(duplicados)
# output: [2, 4, 6]
TestarDe forma semelhante, a função filter
pode ser usada para filtrar elementos de uma lista que atendam a um critério de verdadeiro/falso definido pela função lambda:
numeros = [1, 2, 3]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares)
# output: [2]
TestarUsar uma função lambda em um DataFrame
Ao usar a bilbioteca Pandas, a principal biblioteca de análise de dados em Python, as funções lambda são úteis para definir e aplicar lógicas customizadas a colunas de DataFrames:
import pandas as pd
# Criando um DataFrame de exemplo
df = pd.DataFrame({
'Produto': ["Camiseta", "Calça", "Tênis"],
'Preco': [100, 150, 200],
})
print(df)
# output:
# Produto Preco
# 0 Camiseta 100
# 1 Calça 150
# 2 Tênis 200
df['ComDesconto'] = df['Preco'].apply(lambda x: x * 0.9)
print(df)
# output:
# Produto Preco ComDesconto
# 0 Camiseta 100 90.0
# 1 Calça 150 135.0
# 2 Tênis 200 180.0
TestarNeste código, a função lambda aplicada com df['Preco'].apply()
realiza um cálculo que multiplica o preço original em 0.9
, efetivamente aplicando um desconto de 10%. Isso demonstra a facilidade e praticidade de usarmos funções lambda em DataFrames do Pandas.
Conclusão
As funções lambda, embora façam parte de um conteúdo mais avançado de Python, são uma parte essencial da linguagem, que qualquer programador experiente deve conhecer e dominar. Se você ainda está iniciando seus passos em Python, recomendamos nosso curso gratuito Python MasterClass, onde você vai de zero ao primeiro dashboard em apenas duas horas.
Continue com a gente da Asimov Academy para mais conteúdo de Python!
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários