Durante o desenvolvimento de programas, é comum criar funções pequenas que serão utilizadas apenas uma única vez. Escrever uma função completa utilizando def para uma operação simples pode tornar o código mais extenso do que o necessário.
Para resolver esse tipo de situação, Python oferece as Funções Lambda.
Uma função lambda é uma função anônima, ou seja, uma função criada sem um nome utilizando a palavra-chave lambda. Elas são utilizadas principalmente quando uma função é simples, possui apenas uma expressão e será usada temporariamente, como em operações de ordenação, filtragem ou transformação de dados.
Embora as funções lambda sejam muito úteis, seu uso deve ser feito com equilíbrio. Quando a lógica começa a ficar complexa, utilizar uma função tradicional (def) geralmente torna o código mais legível e fácil de manter.
Neste capítulo aprenderemos como criar funções lambda, quando utilizá-las e quais são suas principais aplicações no desenvolvimento profissional.
Uma função lambda é uma função anônima composta por uma única expressão.
Sintaxe:
lambda parâmetros: expressãoEstrutura:
lambda argumentos : valor_retornado
Exemplo:
dobro = lambda x: x * 2
print(dobro(5))Resultado:
10
Utilizando def:
def soma(a, b):
return a + bUtilizando lambda:
soma = lambda a, b: a + bAmbas produzem o mesmo resultado.
As funções lambda possuem algumas características importantes:
- Não possuem nome próprio (embora possam ser atribuídas a uma variável).
- Possuem apenas uma única expressão.
- Retornam automaticamente o resultado da expressão.
- Não utilizam a palavra-chave
return. - São frequentemente utilizadas como argumento para outras funções.
quadrado = lambda numero: numero ** 2
print(quadrado(6))Resultado:
36
multiplicar = lambda a, b: a * b
print(multiplicar(4, 8))Resultado:
32
Também é possível criar funções lambda sem parâmetros.
mensagem = lambda: "Olá, Python!"
print(mensagem())Resultado:
Olá, Python!
Utilizando Lambda com sorted()
Uma das aplicações mais comuns das funções lambda é definir critérios de ordenação.
Exemplo:
produtos = [
("Notebook", 3500),
("Mouse", 80),
("Monitor", 900)
]
ordenados = sorted(produtos, key=lambda produto: produto[1])
print(ordenados)Resultado:
[
('Mouse', 80),
('Monitor', 900),
('Notebook', 3500)
]
O parâmetro key recebe uma função que informa qual atributo será utilizado para ordenar os elementos.
A função map() aplica uma função a todos os elementos de um iterável.
numeros = [1, 2, 3, 4]
dobros = list(map(lambda x: x * 2, numeros))
print(dobros)Resultado:
[2, 4, 6, 8]
A função filter() seleciona apenas os elementos que satisfazem uma condição.
numeros = [1, 2, 3, 4, 5, 6]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares)Resultado:
[2, 4, 6]
A função reduce() está no módulo functools.
Ela reduz uma sequência a um único valor.
from functools import reduce
numeros = [1, 2, 3, 4]
resultado = reduce(lambda a, b: a + b, numeros)
print(resultado)Resultado:
10
Ordenando por idade.
pessoas = [
{"nome": "Ana", "idade": 30},
{"nome": "Carlos", "idade": 20},
{"nome": "Pedro", "idade": 25}
]
ordenadas = sorted(
pessoas,
key=lambda pessoa: pessoa["idade"]
)
print(ordenadas)Uma função lambda pode conter uma expressão condicional.
par_ou_impar = lambda numero: "Par" if numero % 2 == 0 else "Ímpar"
print(par_ou_impar(7))Resultado:
Ímpar
Funções lambda não permitem:
- Múltiplas instruções;
- Laços (
for,while); - Comandos
iftradicionais; - Utilização explícita de
return; - Documentação por meio de docstrings.
Exemplo inválido:
lambda x:
if x > 0:
return xUtilize lambda quando:
- A função for pequena;
- Possuir apenas uma expressão;
- For utilizada temporariamente;
- Servir como argumento para outra função.
Prefira def quando:
- Houver múltiplas instruções;
- A lógica for complexa;
- A função for reutilizada em diversos lugares;
- For importante documentar a função.
from functools import reduce
numeros = [5, 8, 12, 15, 20]
pares = list(filter(lambda x: x % 2 == 0, numeros))
quadrados = list(map(lambda x: x ** 2, pares))
soma = reduce(lambda a, b: a + b, quadrados)
print("Pares:", pares)
print("Quadrados:", quadrados)
print("Soma:", soma)Saída:
Pares: [8, 12, 20]
Quadrados: [64, 144, 400]
Soma: 608
filter()seleciona apenas os números pares.map()calcula o quadrado de cada número.reduce()soma todos os quadrados obtidos.
Evite:
lambda x: ...Com uma lógica extensa e difícil de entender.
Prefira:
def calcular(...):
...Embora seja possível:
somar = lambda a, b: a + bEm muitos casos é mais legível utilizar:
def somar(a, b):
return a + bErrado:
lambda x:
return xCorreto:
lambda x: xCódigo menor nem sempre significa código melhor. A legibilidade deve ser priorizada.
- Utilize funções lambda apenas para expressões simples.
- Prefira
defquando a lógica crescer. - Utilize lambda principalmente com
sorted(),map()efilter(). - Evite criar cadeias de lambdas difíceis de compreender.
- Escreva código pensando na manutenção futura.
Transformação de dados utilizando map() e filter() antes do processamento.
Ordenação e manipulação de grandes coleções de registros.
Ordenação de listas de objetos por atributos específicos antes de enviá-las para interfaces ou APIs.
Pré-processamento de conjuntos de dados e transformação de atributos.
Filtragem e conversão rápida de listas durante scripts de automação.
| Característica | def |
lambda |
|---|---|---|
| Possui nome | Sim | Não (normalmente) |
| Permite múltiplas instruções | Sim | Não |
Utiliza return |
Sim | Não |
| Pode conter documentação | Sim | Não |
| Melhor para lógica complexa | Sim | Não |
| Ideal para funções temporárias | Não | Sim |
As funções lambda são funções anônimas utilizadas para representar operações simples e temporárias. Elas são especialmente úteis como argumentos para funções como sorted(), map(), filter() e reduce(), permitindo escrever código mais conciso. No entanto, por aceitarem apenas uma expressão, não substituem as funções tradicionais em cenários que exigem lógica mais elaborada. Saber quando utilizar lambda e quando optar por def é uma habilidade importante para produzir códigos claros, reutilizáveis e de fácil manutenção.
- Crie uma função lambda que receba um número e retorne seu dobro.
- Desenvolva uma função lambda que receba dois números e retorne o maior deles.
- Utilize
map()e uma função lambda para calcular o quadrado de todos os elementos de uma lista. - Utilize
filter()e uma função lambda para selecionar apenas os números ímpares de uma lista. - Utilize
reduce()para calcular o produto de todos os elementos de uma lista. - Ordene uma lista de tuplas representando alunos (
nome,nota) utilizandosorted()e uma função lambda para ordenar pela nota. - Crie uma função lambda que retorne
"Positivo","Negativo"ou"Zero"de acordo com o valor informado. - Ordene uma lista de dicionários representando produtos (
nomeepreço) utilizando uma função lambda. - Reescreva três funções simples criadas anteriormente com
defutilizando funções lambda e compare a legibilidade das duas abordagens. - Pesquise como funções lambda são utilizadas em bibliotecas como Pandas ou PySpark e descreva um exemplo prático de aplicação.
Desenvolva um programa chamado Processador de Dados.
O sistema deve manipular uma lista de produtos representados por dicionários contendo:
- Nome;
- Categoria;
- Preço;
- Quantidade em estoque.
- Listar todos os produtos.
- Ordenar produtos pelo preço.
- Ordenar produtos pela quantidade em estoque.
- Filtrar apenas produtos acima de determinado preço.
- Filtrar apenas produtos de uma categoria específica.
- Aplicar um desconto percentual em todos os produtos utilizando
map(). - Calcular o valor total do estoque utilizando
reduce(). - Encerrar o programa.
- Utilize funções lambda sempre que fizer sentido.
- Utilize
sorted(),filter(),map()ereduce(). - Organize o código em funções reutilizáveis.
- Trate entradas inválidas utilizando
tryeexcept. - Evite utilizar funções lambda para lógicas complexas, priorizando a legibilidade.
Implemente uma opção que permita ao usuário escolher dinamicamente o critério de ordenação (nome, preço, categoria ou quantidade), utilizando uma função lambda apropriada para cada caso.
Esse desafio consolida os conceitos de funções lambda, programação funcional, funções de alta ordem, ordenação, transformação de dados e filtragem de coleções, habilidades amplamente utilizadas em aplicações profissionais de Python, especialmente em áreas como Ciência de Dados, Engenharia de Dados e Desenvolvimento Web.