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ê.


Funções internas relacionadas:filter() sorted() list() lambda map() max() sum() False True None

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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully
💡 O que significa "funções são cidadãos de primeira classe"? Significa que funções estão no mesmo nível que inteiros, strings e listas — você pode atribuí-las a variáveis, colocá-las em listas, passá-las como argumentos e retorná-las como valores. Este paradigma de programação é chamado de "programação funcional."



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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# 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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Executed successfully

filter() também equivale a uma comprehension: filter(f, seq) ≈ [x for x in seq if f(x)]. Usar None como 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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Executed successfully

▶ Exemplo: Ordenação Multi-Nível (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Executed successfully

(1) Processo de Execução de reduce()

PYTHON
# 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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully

(2) Sintaxe Completa de Lambda

PYTHON
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

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Executed successfully

(4) Quando Usar Lambda

▶ Exemplo: Casos de Uso de Lambda

TEXT 📖 Somente leitura
# ✅ 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
💡 Regra prática para lambda: Se a lógica precisa de mais de uma expressão ou ramificação if-elif, não use lambda — escreva uma função regular. A elegância do lambda está em seu "minimalismo."



7. Casos de Uso Comuns


Funções internas relacionadas:filter() sorted() list() lambda map() max() sum() False True None

❓ Perguntas Frequentes

P Qual é melhor — map() ou list comprehensions?
R A comunidade Python prefere list comprehensions — mais intuitivas, mais pytônicas. 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.
P Lambda pode abranger múltiplas linhas?
R Não. A sintaxe lambda é restrita a expressões únicas. Para lógica de múltiplas linhas, defina uma função regular. O lambda do Python é deliberadamente mais fraco que em outras linguagens (como JavaScript) — Guido (criador do Python) acredita que "explícito é melhor que implícito."
P reduce() ainda é usado no Python moderno?
R Não muito. O próprio Guido não gostava de reduce(), achando difícil de entender. A maioria dos cenários de reduce() pode ser substituída por um laço ou uma função mais direta (como sum(), max()). No entanto, reduce() continua sendo um conceito importante na programação funcional.

📖 Resumo



📝 Exercícios

  1. Básico (Dificuldade ⭐): Dado nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], use map() e filter() para: filtrar números ímpares e calcular seus quadrados. Dica: Primeiro filter para ímpares, depois map para quadrados.

  2. Intermediário (Dificuldade ⭐⭐): Dada uma lista de dicionários products = [{"name": "A", "price": 100}, {"name": "B", "price": 80}, {"name": "C", "price": 120}], use sorted() para ordenar por preço decrescente e exiba nomes e preços.

  3. Desafio (Dificuldade ⭐⭐⭐): Use reduce() para implementar uma função flatten(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: Em reduce, use + para mesclar duas listas cada vez. Depois implemente o mesmo com uma list comprehension e compare as abordagens.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%