Lambda e Closures
Em Python, lambdas
e closures
são técnicas avançadas para criar funções de maneira concisa e poderosa. As lambdas
são funções anônimas e de uma única expressão, enquanto as closures
são funções definidas dentro de outras funções que podem capturar variáveis do escopo pai. Neste tutorial, vamos explorar esses conceitos em detalhes, entender como eles funcionam e aprender como utilizá-los para simplificar e aprimorar suas funções em Python.
1. Lambdas em Python: Funções Anônimas Simples
Lambdas
são funções anônimas de uma única expressão. Elas são úteis para operações simples e podem ser usadas onde funções mais complexas são esperadas. A sintaxe básica de uma lambda
é:
lambda argumentos: expressao
Exemplo 1: Lambda para Somar Dois Números
soma = lambda x, y: x + y
print(soma(3, 5)) # Saída: 8
Neste exemplo, lambda
é usado para criar uma função que soma dois números.
Exemplo 2: Usando Lambda com map()
numeros = [1, 2, 3, 4, 5]
quadrados = list(map(lambda x: x ** 2, numeros))
print(quadrados) # Saída: [1, 4, 9, 16, 25]
Neste exemplo, lambda
é usado com map()
para calcular os quadrados dos números.
2. Closures em Python: Funções Dentro de Funções
Closures
são funções definidas dentro de outras funções. Elas podem capturar variáveis do escopo pai e são úteis para criar funções que podem manter o estado entre chamadas.
Exemplo 3: Closure para Contador
def contador():
count = 0
def incrementar():
nonlocal count
count += 1
return count
return incrementar
contador_funcao = contador()
print(contador_funcao()) # Saída: 1
print(contador_funcao()) # Saída: 2
Neste exemplo, a função contador()
retorna uma closure incrementar()
que mantém o estado da variável count
entre chamadas.
Lambdas e closures são técnicas poderosas em Python para criar funções de forma concisa e flexível. As lambdas
são úteis para operações simples e são frequentemente usadas com map()
, filter()
, e reduce()
. As closures
são úteis para criar funções que podem manter o estado entre chamadas e são especialmente úteis em situações onde você precisa encapsular comportamentos específicos em funções.