O que são funções lambda em Python
As funções lambda em Python oferecem uma maneira compacta e elegante de definir funções diretamente dentro de expressões. Também conhecidas como funções anônimas, elas são criadas sem um nome e geralmente usadas localmente, onde não faz sentido definir uma função completa com a palavra-chave def.
As funções lambda se destacam pela simplicidade e praticidade. São frequentemente combinadas com funções de ordem superior, como map(), filter() e sorted(). Além disso, são amplamente utilizadas em bibliotecas populares do ecossistema Python, como pandas, NumPy, Flask e Tkinter.
Fundamentos da sintaxe de funções lambda
Estrutura de uma expressão lambda
A sintaxe de uma função lambda em Python segue este formato:
lambda argumentos: expressão
Onde:
- argumentos — lista de parâmetros da função, similar a uma função comum
- expressão — uma única expressão cujo resultado é retornado como saída da função
Características importantes das funções lambda
As funções lambda em Python possuem algumas propriedades essenciais:
- Retornam automaticamente o resultado da expressão
- Não utilizam a palavra-chave
return - O valor calculado na expressão é o valor de retorno
- Suportam apenas uma única expressão no corpo da função
Exemplos práticos de expressões lambda
Operações matemáticas simples
# Calcular o quadrado de um número
quadrado = lambda x: x ** 2
print(quadrado(5)) # 25
# Somar dois números
soma = lambda a, b: a + b
print(soma(3, 7)) # 10
# Verificar se um número é par
eh_par = lambda x: x % 2 == 0
print(eh_par(4)) # True
Lambda com expressões condicionais
# Determinar o valor máximo
valor_maximo = lambda x, y: x if x > y else y
print(valor_maximo(10, 15)) # 15
# Categorizar números
categorizar = lambda x: "positivo" if x > 0 else "negativo" if x < 0 else "zero"
Comparação entre lambda e funções tradicionais
Principais diferenças
| Característica | Função tradicional (def) | Função lambda |
|---|---|---|
| Sintaxe | def func(x): return x * 2 | lambda x: x * 2 |
| Quantidade de expressões | Múltiplas | Apenas uma |
| Nomeação | Possui nome | Geralmente anônima |
| Escopo de uso | Reutilização | Operações pontuais |
| Documentação | Suporta docstring | Não suporta |
| Anotações de tipo | Suporta | Suporte limitado |
Quando usar lambda
As funções lambda são mais eficientes nestes cenários:
- Operações simples de uma única linha
- Uso como argumento de outras funções
- Cálculos temporários sem necessidade de reutilização
- Trabalho com funções de ordem superior
Aplicação de lambda em funções de ordem superior
Função map()
A função map() aplica uma função a cada elemento de um iterável:
numeros = [1, 2, 3, 4, 5]
quadrados = list(map(lambda x: x**2, numeros))
print(quadrados) # [1, 4, 9, 16, 25]
# Converter strings para maiúsculas
palavras = ["olá", "mundo", "python"]
maiusculas = list(map(lambda s: s.upper(), palavras))
print(maiusculas) # ['OLÁ', 'MUNDO', 'PYTHON']
Função filter()
A função filter() cria um iterador com elementos que satisfazem uma condição:
numeros = [1, 2, 3, 4, 5, 6]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares) # [2, 4, 6]
# Filtrar palavras com mais de 3 letras
palavras = ["oi", "python", "lambda", "é", "legal"]
longas = list(filter(lambda s: len(s) > 3, palavras))
print(longas) # ['python', 'lambda', 'legal']
Função sorted()
O sorted() aceita uma função lambda como chave de ordenação:
# Ordenar tuplas pelo segundo elemento
dados = [(1, 5), (3, 2), (2, 8)]
ordenado = sorted(dados, key=lambda x: x[1])
print(ordenado) # [(3, 2), (1, 5), (2, 8)]
# Ordenar dicionários por valor
alunos = [{"nome": "Ana", "nota": 8}, {"nome": "João", "nota": 6}]
melhores = sorted(alunos, key=lambda x: x["nota"], reverse=True)
Lambda com pandas
Em pandas, as funções lambda são frequentemente usadas com apply() e map():
import pandas as pd
df = pd.DataFrame({"nome": ["Ana", "João", "Maria"], "idade": [25, 30, 22]})
# Criar nova coluna com lambda
df["faixa_etaria"] = df["idade"].apply(lambda x: "jovem" if x < 30 else "adulto")
print(df)
Criando closures com lambda
As funções lambda podem criar closures, capturando variáveis do escopo externo:
def multiplicador(n):
return lambda x: x * n
dobro = multiplicador(2)
triplo = multiplicador(3)
print(dobro(5)) # 10
print(triplo(5)) # 15
Boas práticas e limitações
Quando evitar lambda
- Lógicas complexas com múltiplas condições
- Funções que precisam de documentação (docstring)
- Código que será reutilizado em vários lugares
- Depuração, pois lambdas anônimas são difíceis de rastrear
Dicas de uso eficiente
- Prefira lambda para operações simples e diretas
- Use funções nomeadas com
defpara lógicas mais elaboradas - Combine lambda com funções de ordem superior para código conciso
- Evite aninhar múltiplas lambdas para manter a legibilidade
Conclusão
As funções lambda em Python são uma ferramenta poderosa para escrever código mais limpo e expressivo. Elas brilham em cenários onde uma função simples é necessária por um curto período, especialmente com funções de ordem superior como map(), filter() e sorted(). No entanto, para lógicas mais complexas, as funções tradicionais com def ainda são a melhor escolha. Pratique com os exemplos deste guia e descubra como as lambdas podem tornar seu código Python mais elegante!