Python: Funções de Alta Ordem e Lambda
Última atualização: 2026-09-22
Em Python, funções também são "valores" — podem ser atribuídas a variáveis, passadas para outras funções, como números e strings. Isso permite código muito conciso e elegante. Funções de alta ordem são funções que recebem outras funções como argumentos ou retornam funções. Esta lição abrirá um novo mundo para você.
1. Funções são Cidadãos de Primeira Classe
Em Python, funções podem ser manipuladas como qualquer outro valor:
▶ Exemplo: Funções como Valores
▶ ExperimenteSaída:
# Function defined successfully
2. map(): Transformação em Lote
map() aplica uma função a cada elemento de uma sequência e retorna um novo iterador:
▶ Exemplo: map Transformação em Lote
▶ ExperimenteSaída:
# Executed successfully
map()equivale a uma list comprehension:map(f, seq)≈[f(x) for x in seq]. Qual usar é questão de preferência — comprehensions são mais "pytônicas."
3. filter(): Filtragem em Lote
filter() seleciona elementos para os quais a função retorna True:
▶ Exemplo: filter Dados
▶ ExperimenteSaída:
# Executed successfully
filter()também equivale a uma comprehension:filter(f, seq)≈[x for x in seq if f(x)]. UsarNonecomo função equivale a remover todos os valores falsy ("",0,None,False, etc.).
4. Uso Avançado de sorted()
A Lição 11 cobriu o parâmetro key de sorted(). Vamos nos aprofundar:
▶ Exemplo: Ordenação Personalizada com sorted
▶ ExperimenteSaída:
# Executed successfully
▶ Exemplo: Ordenação Multi-Nível (Dificuldade ⭐⭐)
▶ ExperimenteSaída:
Bob: 92
Diana: 92
Alice: 85
Charlie: 85
5. reduce(): Computação Acumulativa
reduce() acumula elementos em uma sequência, aplicando uma função a dois elementos por vez. Não é embutido; importe de functools:
▶ Exemplo: reduce Computação Acumulativa
▶ ExperimenteSaída:
# Executed successfully
(1) Processo de Execução de reduce()
# reduce(lambda x, y: x + y, [1, 2, 3, 4])
# Passo 1: x=1, y=2 → 3
# Passo 2: x=3, y=3 → 6
# Passo 3: x=6, y=4 → 10
# Resultado: 10
reduce() vs laços: Tudo que reduce() pode fazer, um laço for também pode. reduce() é mais conciso e declarativo — você está dizendo "o que fazer" em vez de "como fazer." A desvantagem é que pode ser mais difícil de entender para iniciantes.
6. Expressões Lambda em Profundidade
Lambda, nomeado após a letra grega λ, é essencialmente uma função anônima — uma pequena função sem nome, usada e descartada.
(1) Lambda vs Funções Regulares
▶ Exemplo: Lambda vs Regular
▶ ExperimenteSaída:
# Function defined successfully
(2) Sintaxe Completa de Lambda
lambda parâmetros: expressão
# ↑ Equivalente a
def função_anônima(parâmetros):
return expressão
(3) Múltiplos Parâmetros
▶ Exemplo: Lambda com Múltiplos Parâmetros
▶ ExperimenteSaída:
# Executed successfully
(4) Quando Usar Lambda
▶ Exemplo: Casos de Uso de Lambda
# ✅ Bom: transformação simples de uma linha como argumento para function de alta ordem
numbers = [1, 2, 3, 4]
result = list(map(lambda x: x ** 2, numbers))
# ❌ Ruim: lógica complexa que requer múltiplas linhas — use uma function def regular
7. Casos de Uso Comuns
- Pipelines de dados: Encadeie
map()→filter()→sorted()para processamento de dados. - Ordenação personalizada: Use
lambdacomo parâmetrokeypara várias regras de ordenação. - Callbacks de eventos: Passe funções como argumentos para frameworks GUI ou web.
- Fábricas de closure: Função externa retorna função interna para funcionalidade "parametrizada."
- Avaliação preguiçosa: Funções de alta ordem adiam a computação até que seja necessária.
❓ Perguntas Frequentes
map() ou list comprehensions?map() tem vantagens: ① Mais curto quando você tem um nome de função existente (map(str.upper, seq) vs [s.upper() for s in seq]); ② Retorna um iterador preguiçoso, economizando memória para grandes dados. Na maioria dos casos, list comprehensions são a melhor escolha.reduce() ainda é usado no Python moderno?📖 Resumo
- Funções são cidadãos de primeira classe em Python — podem ser atribuídas, passadas e retornadas
map(f, seq)aplica uma função a cada elemento; uselist()para converter em listafilter(f, seq)seleciona elementos onde a função retorna Truesorted(seq, key=f)aceita uma função para ordenação personalizadareduce(f, seq)acumula valores; importe defunctools- Lambda
lambda params: expressioné uma função anônima de uma linha para cenários simples
📝 Exercícios
-
Básico (Dificuldade ⭐): Dado
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], usemap()efilter()para: filtrar números ímpares e calcular seus quadrados. Dica: Primeirofilterpara ímpares, depoismappara quadrados. -
Intermediário (Dificuldade ⭐⭐): Dada uma lista de dicionários
products = [{"name": "A", "price": 100}, {"name": "B", "price": 80}, {"name": "C", "price": 120}], usesorted()para ordenar por preço decrescente e exiba nomes e preços. -
Desafio (Dificuldade ⭐⭐⭐): Use
reduce()para implementar uma funçãoflatten(nested_list)que achata uma lista aninhada em um nível. Por exemplo,flatten([[1, 2], [3, 4], [5]])retorna[1, 2, 3, 4, 5]. Dica: Emreduce, use+para mesclar duas listas cada vez. Depois implemente o mesmo com uma list comprehension e compare as abordagens.