Skip to content

Latest commit

 

History

History

04-lambdas

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

Funções Lambda (Lambda Functions)

Bem-vindo ao Módulo 4!

Introdução

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.

Base Teórica

O que é uma Função Lambda?

Uma função lambda é uma função anônima composta por uma única expressão.

Sintaxe:

lambda parâmetros: expressão

Estrutura:

lambda argumentos : valor_retornado

Exemplo:

dobro = lambda x: x * 2

print(dobro(5))

Resultado:

10

Comparação com uma Função Tradicional

Utilizando def:

def soma(a, b):
    return a + b

Utilizando lambda:

soma = lambda a, b: a + b

Ambas produzem o mesmo resultado.

Características das Funções Lambda

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.

Lambda com Um Parâmetro

quadrado = lambda numero: numero ** 2

print(quadrado(6))

Resultado:

36

Lambda com Dois Parâmetros

multiplicar = lambda a, b: a * b

print(multiplicar(4, 8))

Resultado:

32

Lambda sem Parâmetros

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)
]

Explicação

O parâmetro key recebe uma função que informa qual atributo será utilizado para ordenar os elementos.

Utilizando Lambda com map()

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]

Utilizando Lambda com filter()

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]

Utilizando Lambda com reduce()

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

Lambda em Ordenações Complexas

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)

Lambda com Expressões Condicionais

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

Limitações das Funções Lambda

Funções lambda não permitem:

  • Múltiplas instruções;
  • Laços (for, while);
  • Comandos if tradicionais;
  • Utilização explícita de return;
  • Documentação por meio de docstrings.

Exemplo inválido:

lambda x:

    if x > 0:
        return x

Quando Utilizar Lambda?

Utilize lambda quando:

  • A função for pequena;
  • Possuir apenas uma expressão;
  • For utilizada temporariamente;
  • Servir como argumento para outra função.

Quando Evitar Lambda?

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.

Exemplo Completo

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

Explicação

  1. filter() seleciona apenas os números pares.
  2. map() calcula o quadrado de cada número.
  3. reduce() soma todos os quadrados obtidos.

Erros Comuns

Utilizar Lambda para Funções Complexas

Evite:

lambda x: ...

Com uma lógica extensa e difícil de entender.

Prefira:

def calcular(...):
    ...

Atribuir Muitas Lambdas a Variáveis

Embora seja possível:

somar = lambda a, b: a + b

Em muitos casos é mais legível utilizar:

def somar(a, b):
    return a + b

Esquecer que Lambda Retorna Automaticamente

Errado:

lambda x:
    return x

Correto:

lambda x: x

Usar Lambda Apenas por Ser "Mais Curto"

Código menor nem sempre significa código melhor. A legibilidade deve ser priorizada.

Boas Práticas

  • Utilize funções lambda apenas para expressões simples.
  • Prefira def quando a lógica crescer.
  • Utilize lambda principalmente com sorted(), map() e filter().
  • Evite criar cadeias de lambdas difíceis de compreender.
  • Escreva código pensando na manutenção futura.

Casos de Uso no Mercado

Ciência de Dados

Transformação de dados utilizando map() e filter() antes do processamento.

Engenharia de Dados

Ordenação e manipulação de grandes coleções de registros.

Desenvolvimento Web

Ordenação de listas de objetos por atributos específicos antes de enviá-las para interfaces ou APIs.

Machine Learning

Pré-processamento de conjuntos de dados e transformação de atributos.

Automação

Filtragem e conversão rápida de listas durante scripts de automação.

Comparação entre def e lambda

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

Resumo

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.

Exercícios Propostos

  1. Crie uma função lambda que receba um número e retorne seu dobro.
  2. Desenvolva uma função lambda que receba dois números e retorne o maior deles.
  3. Utilize map() e uma função lambda para calcular o quadrado de todos os elementos de uma lista.
  4. Utilize filter() e uma função lambda para selecionar apenas os números ímpares de uma lista.
  5. Utilize reduce() para calcular o produto de todos os elementos de uma lista.
  6. Ordene uma lista de tuplas representando alunos (nome, nota) utilizando sorted() e uma função lambda para ordenar pela nota.
  7. Crie uma função lambda que retorne "Positivo", "Negativo" ou "Zero" de acordo com o valor informado.
  8. Ordene uma lista de dicionários representando produtos (nome e preço) utilizando uma função lambda.
  9. Reescreva três funções simples criadas anteriormente com def utilizando funções lambda e compare a legibilidade das duas abordagens.
  10. Pesquise como funções lambda são utilizadas em bibliotecas como Pandas ou PySpark e descreva um exemplo prático de aplicação.

Desafio

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.

Funcionalidades

  1. Listar todos os produtos.
  2. Ordenar produtos pelo preço.
  3. Ordenar produtos pela quantidade em estoque.
  4. Filtrar apenas produtos acima de determinado preço.
  5. Filtrar apenas produtos de uma categoria específica.
  6. Aplicar um desconto percentual em todos os produtos utilizando map().
  7. Calcular o valor total do estoque utilizando reduce().
  8. Encerrar o programa.

Requisitos

  • Utilize funções lambda sempre que fizer sentido.
  • Utilize sorted(), filter(), map() e reduce().
  • Organize o código em funções reutilizáveis.
  • Trate entradas inválidas utilizando try e except.
  • Evite utilizar funções lambda para lógicas complexas, priorizando a legibilidade.

Desafio Extra

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.