
Passo 1 de 6
Escrever uma função com lambda
Construa uma função curta com lambda e diferencie sua criação da chamada que produz um resultado.
Trilha de aprendizado · Nível 9 · Tutorial 2
Ao concluir, você será capaz de escrever funções curtas com lambda e escolher uma forma de expressão adequada à tarefa e à legibilidade.
Escrever uma função com lambda
Construa uma função curta com lambda e diferencie sua criação da chamada que produz um resultado. 2 min
Usar lambda diretamente em um argumento
Use uma lambda curta no argumento key quando o critério de ordenação for simples, pontual e fácil de ler ao lado da chamada. 2 min
Separar expressão curta de código claro
Entenda o limite sintático de uma lambda e por que uma expressão válida não é necessariamente clara ou livre de efeitos colaterais. 2 min
Dar um nome à regra com def
Refatore uma lambda pouco clara para uma função nomeada que revele a intenção sem mudar o comportamento. 2 min
Escolher entre uma função e uma coleção
Decida se a tarefa precisa entregar um comportamento para ser chamado ou produzir imediatamente uma nova lista. 2 min
Aplicar e justificar as escolhas
Resolva uma transformação de um catálogo de livros e justifique quando usar lambda, def e compreensão. 3 min

Passo 1 de 6
Construa uma função curta com lambda e diferencie sua criação da chamada que produz um resultado.
Uma expressão lambda cria uma função sem usar uma declaração def nomeada.
A forma básica é:
lambda parâmetros: expressão
Os parâmetros recebem valores quando a função é chamada. O resultado da expressão é retornado automaticamente: não escreva return.
Leia da esquerda para a direita: lambda inicia a função, numero é o parâmetro, os dois-pontos separam a entrada do cálculo e numero * 2 produz o resultado.

A expressão após os dois-pontos é o valor que a função devolverá.
Execute este código no seu editor ou no interpretador Python.
dobrar = lambda numero: numero * 2
resultado = dobrar(4)
print(resultado) # 8Na primeira linha, lambda numero: numero * 2 cria um objeto função e ele é associado ao nome dobrar. O cálculo ainda não aconteceu.
Na segunda linha, dobrar(4) chama essa função. O valor 4 ocupa o parâmetro numero, a expressão calcula 4 * 2 e a chamada resulta em 8.
Dica
O nome dobrar se refere à função. Já dobrar(4), com parênteses, representa a chamada e produz um valor.
Complete o corpo da lambda para criar uma função que receba preco e devolva o valor com 10% de desconto.
com_desconto = lambda preco: ____
Ao chamar com_desconto(100), o resultado deve ser 90.0.
Considere:
triplicar = lambda valor: valor * 3saida = triplicar(5)
Qual afirmação está correta?

Passo 2 de 6
Use uma lambda curta no argumento key quando o critério de ordenação for simples, pontual e fácil de ler ao lado da chamada.
Quando a ordenação precisa apenas extrair um campo de cada dicionário, a lambda pode ficar diretamente em key. Assim, a regra é lida no mesmo lugar em que será usada.
livros_ordenados = sorted(livros, key=lambda livro: livro["ano"])A lambda recebe cada livro e devolve seu "ano", que será usado como chave de comparação. Ela não ordena sozinha: apenas informa qual valor sorted deve consultar em cada item.
Observe que os dicionários continuam sendo os elementos do resultado; os anos servem somente para definir a ordem.

lambda livro: livro["ano"] extrai uma chave de comparação para cada registro.
As duas versões abaixo usam a mesma regra de ordenação.
livros = [
{"titulo": "Horizonte", "ano": 2022},
{"titulo": "Raiz", "ano": 2018},
{"titulo": "Vento", "ano": 2020},
]
# Regra escrita diretamente no argumento:
por_lambda = sorted(livros, key=lambda livro: livro["ano"])
# Regra passada por um nome já disponível:
def extrair_ano(livro):
return livro["ano"]
por_funcao = sorted(livros, key=extrair_ano)
assert por_lambda == por_funcao
print([livro["titulo"] for livro in por_lambda])
# ['Raiz', 'Vento', 'Horizonte']Dica
Prefira a lambda direta quando a extração for curta, usada só ali e continuar imediatamente compreensível. Passar uma função nomeada também é válido; lambda é uma opção, não uma obrigação.
Considere:
produtos = [
{"nome": "Caderno", "preco": 18.0},
{"nome": "Caneta", "preco": 4.5},
{"nome": "Mochila", "preco": 120.0},
]Escreva uma linha que crie ordenados com os produtos em ordem crescente de preco, usando uma lambda em key. Em seguida, explique em uma frase por que essa lambda permanece clara nesse ponto do código.
Escreva pelo menos 40 caracteres (0/40).

Passo 3 de 6
Entenda o limite sintático de uma lambda e por que uma expressão válida não é necessariamente clara ou livre de efeitos colaterais.
O corpo de uma lambda contém uma única expressão: algo que é avaliado e produz um valor. Ela não aceita um bloco de instruções como uma função escrita com def.
Isso é uma regra de sintaxe. Não significa que toda lambda será pequena, fácil de ler ou isenta de ações além de calcular um resultado.
Compare o corpo de uma lambda com o corpo de uma função nomeada.

A lambda recebe parâmetros e avalia uma expressão; def pode organizar várias instruções em um bloco.
Uma expressão pode incluir chamadas, condições e operadores. Portanto, ela pode ficar longa ou difícil de interpretar, mesmo aparecendo em uma única linha.
Por exemplo, esta lambda é sintaticamente válida e retorna um texto:
rotulo = lambda produto: (
f"{produto['nome'].strip().title()} — "
f"R$ {produto['preco'] * (1 - produto['desconto']):.2f}"
)
item = {"nome": " caderno ", "preco": 20.0, "desconto": 0.1}
print(rotulo(item)) # Caderno — R$ 18.00Atenção
O código é válido e seu comportamento pode estar correto. Ainda assim, quando uma lambda acumula detalhes, condicionais ou muitas operações, a intenção pode deixar de ser evidente. Lambdas extensas ou aninhadas são um sinal para revisar a clareza.
O fato de o corpo ser uma expressão não impede chamadas com efeitos colaterais. print() exibe uma mensagem; métodos como append() modificam uma lista. Se forem chamados dentro da expressão, esses efeitos acontecem quando a lambda é executada.
numeros = []
adicionar = lambda numero: numeros.append(numero)
resultado = adicionar(7)
print(numeros) # [7]
print(resultado) # NoneDica
Para avaliar uma lambda, observe não só seu tamanho, mas também as chamadas dentro dela. Uma expressão pode retornar um valor, exibir algo, modificar um objeto — ou combinar comportamentos que ficam difíceis de entender.
Toda lambda é livre de efeitos colaterais porque seu corpo aceita apenas uma expressão.

Passo 4 de 6
Refatore uma lambda pouco clara para uma função nomeada que revele a intenção sem mudar o comportamento.
Prefira def quando um nome significativo tornar a regra mais fácil de entender. Isso vale mesmo para uma implementação curta ou usada apenas uma vez: o nome pode explicar por que aquela transformação existe.
Evite usar uma lambda atribuída a uma variável como se fosse uma função nomeada. Se a intenção é criar uma regra estável, declare-a com def.
As duas formas abaixo podem produzir o mesmo resultado, mas a função nomeada torna a regra reconhecível no ponto de uso.

O comportamento pode ser preservado; a escolha melhora a leitura do código.
Dica
Pergunte: “alguém entende a regra ao ler apenas o nome?” Se a resposta for sim, um def bem nomeado costuma ser uma escolha mais clara.
Nesta lambda, há mais de uma etapa: remover espaços das pontas e converter o texto para minúsculas. O nome ajustar não explica qual é a regra aplicada.
ajustar = lambda titulo: titulo.strip().lower()
assert ajustar(" Python para Dados ") == "python para dados"A refatoração mantém o mesmo parâmetro, o mesmo valor retornado e o mesmo resultado. Agora, o nome informa o propósito; as etapas também podem ficar explícitas para facilitar mudanças futuras.
def normalizar_titulo(titulo):
"""Remove espaços externos e converte o título para minúsculas."""
titulo_sem_espacos = titulo.strip()
return titulo_sem_espacos.lower()
assert normalizar_titulo(" Python para Dados ") == "python para dados"Exemplo
Para a entrada " Python para Dados ", ambas as versões retornam "python para dados". A mudança é de forma e clareza, não de comportamento.
Reescreva esta regra usando def, com um nome que expresse sua intenção. Em seguida, justifique em uma frase o ganho de clareza.
valido = lambda ano: ano <= 2024
Seu código deve continuar retornando True para 2024 e False para 2025.
Escreva pelo menos 80 caracteres (0/80).

Passo 5 de 6
Decida se a tarefa precisa entregar um comportamento para ser chamado ou produzir imediatamente uma nova lista.
lambda e def criam funções: objetos que outra operação pode chamar depois. Já uma compreensão de lista é avaliada para produzir uma lista naquele momento.
Escolha uma função quando uma API pede um comportamento, como o critério key de sorted. Escolha uma compreensão quando seu objetivo imediato é obter dados transformados ou filtrados em uma nova coleção.
Observe o destino de cada forma de expressão.

Uma função é passada para ser chamada; uma compreensão produz a lista que você quer usar.
Dica
Pergunte: “Outra operação precisa chamar uma regra?” Se sim, entregue uma função. Pergunte: “Quero construir a lista resultante agora?” Se sim, use uma compreensão.
Uma compreensão não impede o uso de def. Se a transformação tem um nome que esclarece a regra, defina a função e chame-a dentro da compreensão. Assim, cada trecho mantém sua responsabilidade: a função normaliza um título; a compreensão monta a lista.
Execute este exemplo e compare os tipos e resultados.
livros = [
{"titulo": " Python para Dados ", "paginas": 320},
{"titulo": "introdução a python", "paginas": 95},
{"titulo": "TESTES EM PYTHON", "paginas": 180},
]
# Uma lambda é uma função entregue a sorted como critério.
por_paginas = sorted(livros, key=lambda livro: livro["paginas"])
# A regra tem um nome útil; a compreensão constrói a lista final.
def normalizar_titulo(titulo):
return titulo.strip().title()
titulos_longos = [
normalizar_titulo(livro["titulo"])
for livro in livros
if livro["paginas"] >= 100
]
print([livro["paginas"] for livro in por_paginas])
print(titulos_longos)
# Saída:
# [95, 180, 320]
# ['Python Para Dados', 'Testes Em Python']Exemplo
key=lambda livro: livro["paginas"] fornece uma regra curta para sorted chamar. Já titulos_longos recebe uma lista pronta: a compreensão filtra os livros e coleta os títulos normalizados.
Não há competição entre as formas: elas se complementam.
Relacione cada situação à escolha que melhor atende à sua responsabilidade.
Toque em um item e depois no par correspondente.

Passo 6 de 6
Resolva uma transformação de um catálogo de livros e justifique quando usar lambda, def e compreensão.
Neste desafio, cada forma resolve uma responsabilidade diferente:
A melhor forma não é a mais curta: é a que deixa clara a tarefa de cada trecho.
Observe o que cada construção entrega ao código.

A lambda fornece um critério pontual; def nomeia uma regra; a compreensão constrói a coleção final.
No seu editor, crie um arquivo Python, copie o código completo abaixo e execute-o. Ele ordena os livros por ano, normaliza os títulos e cria uma lista apenas com os títulos disponíveis. Os assert verificam localmente o resultado esperado.
Exemplo autocontido para execução local.
livros = [
{"titulo": " o guia do python ", "ano": 2022, "disponivel": True},
{"titulo": "algoritmos práticos", "ano": 2018, "disponivel": False},
{"titulo": " dados e histórias ", "ano": 2020, "disponivel": True},
]
def normalizar_titulo(titulo):
"""Remove espaços extras e padroniza a capitalização do título."""
return titulo.strip().title()
livros_por_ano = sorted(livros, key=lambda livro: livro["ano"])
titulos_disponiveis = [
normalizar_titulo(livro["titulo"])
for livro in livros_por_ano
if livro["disponivel"]
]
assert [livro["ano"] for livro in livros_por_ano] == [2018, 2020, 2022]
assert titulos_disponiveis == ["Dados E Histórias", "O Guia Do Python"]
print(livros_por_ano)
print(titulos_disponiveis)Exemplo
A lista livros_por_ano mantém os três dicionários na ordem dos anos 2018, 2020 e 2022.
A saída de titulos_disponiveis é:
['Dados E Histórias', 'O Guia Do Python']Se os assert não exibirem erro, as verificações passaram.
Dica
Experimente alterar os dados: inclua outro livro ou mude disponivel. Preserve a lambda como chave pontual de sorted, a função nomeada para normalizar e a compreensão para montar a lista. Atualize os assert conforme o novo resultado esperado.
Depois de executar ou analisar o exemplo, justifique: por que a lambda é adequada para a ordenação, por que normalizar_titulo merece def e por que a última etapa é uma compreensão? Cite também o que os assert verificam.
Escreva pelo menos 120 caracteres (0/120).
Resumo
Use a forma que comunica melhor a responsabilidade atual.
key.Parabéns! Você concluiu: Escolher entre lambda, funções nomeadas e compreensões
Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks