Lambda Python: o que é uma função lambda (anônima)?

Avatar de Juliano Faccioni Juliano Faccioni
9 minutos de leitura 2 meses atrás

Dentro do ecossistema Python, as funções lambda são um dos aspectos de aparência mais exótica, especialmente para quem está começando a aprender sobre a linguagem de programação. Afinal, o que tem de especial em uma função lambda? As funções lambda são como funções normais ou não? E quando devo utilizá-las?

Neste artigo, vamos abordar em detalhes estas e outras dúvidas comuns sobre função lambda em Python. Vamos entender o que é de fato uma função lambda, conhecer como podemos utilizá-la em Python e em que momentos vamos precisar aplicá-la diretamente no nosso código. Vamos lá!

O que é uma função lambda?

Uma função lambda é uma função definida em uma única linha, geralmente contendo uma lógica relativamente simples. Como essas funções são frequentemente criadas para servir de argumentos a outras funções, sem que sejam armazenadas em variáveis, também são frequentemente chamadas de “função sem nome” ou “função anônima”.

Funções lambda não são um conceito exclusivo de Python. Na realidade, o termo “função lambda” tem sua origem no cálculo lambda, um ramo da matemática que lida com funções recursivas e que possui grande afinidade com a área de programação em geral – em particular, com a chamada programação funcional.

Funções lambda na programação funcional

Diferentemente da programação orientada a objetos, onde modelamos nosso problema através de objetos que possuem métodos e atributos, na programação funcional as funções é que estão em destaque. Neste paradigma, as funções podem ser atribuídas a variáveis, passadas como argumentos e retornadas por outras funções.

Na programação funcional, as funções lambda permitem expressar funções pequenas e descartáveis, que não precisam ser formalmente definidas. Assim, são perfeitas para operações rápidas, como passar uma função como argumento de outra.

Python é uma linguagem de programação funcional?

O fato de Python possuir funções lambda pode levantar a questão: afinal, Python é uma linguagem funcional? Na realidade, Python é uma linguagem multiparadigma, ou seja, podemos utilizá-la como se fosse uma linguagem puramente orientada a objetos, uma linguagem puramente funcional ou ainda uma mistura de ambos – que é a forma mais comum de utilizá-la.

O que é a função lambda em Python?

Em Python, uma função lambda é uma maneira de escrever uma função em uma única expressão, sem a necessidade de defini-la explicitamente. Ela começa com a palavra-chave lambda, seguida de seus argumentos separados por vírgula ( , ). A expressão a ser calculada aparece após dois-pontos ( : ) . Um exemplo simples: lambda x: x + 2.

Uma vez definida, podemos assinalar uma função lambda para uma variável e chamá-la como qualquer outra função. No exemplo abaixo, criamos a função lambda soma, que aceita dois argumentos (x e y) e retorna a soma dos dois:

soma = lambda x, y: x + y

print(soma(5, 3))
# output: 8
Testar

Neste exemplo, acabamos usando a variável soma para nos referirmos à função lambda. Mas, conforme explicado anteriormente, a forma mais comum de utilizar funções lambda é passando-as diretamente como argumento de outras funções, sem a necessidade de assinalá-las para uma variável.

O que é uma função anônima em Python?

Uma função anônima é simplesmente outra forma de chamarmos uma função lambda em Python. Portanto, “função lambda” e “função anônima” são sinônimos.

Para que serve uma função lambda em Python?

Funções lambda servem para simplificar o código e torná-lo mais legível, em especial quando trabalhamos com funções que aceitam outras funções como um de seus argumentos.

Vejamos o exemplo prático da função sorted abaixo, que ordena sequências. A função sorted aceita o parâmetro key, que é uma função contendo a lógica de ordenamento a ser usada:

minha_lista = [('maçã', 2), ('banana', 1), ('laranja', 3)]
minha_lista_ordenada = sorted(minha_lista, key=lambda x: x[1])

print(minha_lista_ordenada)
# output: [('banana', 1), ('maçã', 2), ('laranja', 3)]
Testar

No caso acima, a função sorted utilizou a lógica descrita pela função lambda para ordenar os elementos de minha_lista. A função lambda toma cada tupla (x) como argumento e retorna o segundo elemento da tupla (x[1]). Assim, a lista de tuplas é ordenada pelo número de forma ascendente.

Criando funções em Python

Agora que aprendemos a usar funções lambda no nosso código, vamos descrever e comparar todas as formas que possuímos para criar funções em Python.

Como criar uma função em Python usando def

Para definir uma função em Python, usamos a palavra-chave def seguida do seu nome. Entre parênteses, definimos o nome e a quantidade de parâmetros. O corpo da função é indicado por uma indentação de 4 espaços e pode conter quantas linhas for necessário para desempenhar a lógica da função.

Um exemplo clássico seria:

def multiplicar(x, y):
    """Multiplica dois números."""
    resultado = x * y
    return resultado


print(multiplicar(2, 3))
# output: 6
Testar

Como criar funções lambda em Python

Comparado com funções tradicionais, funções lambda são muito mais curtas e concisas. Aqui está o mesmo exemplo de multiplicação utilizando uma função lambda:

multiplicar = lambda x, y: x * y

print(multiplicar(2, 3))
# output: 6
Testar

Como chamar uma função lambda em Python

Para chamar uma função lambda, usamos a variável à qual atribuímos a expressão lambda. Neste quesito, a função é chamada exatamente da mesma forma que uma função “tradicional”, definida com def.

No exemplo acima, multiplicar(2, 3) chama a função lambda que faz a multiplicação.

Qual a diferença entre uma função lambda e uma função criada com def?

Funções lambda são breves, geralmente utilizadas uma única vez ou passadas como argumentos de função. Nestes casos, pode ser exagero definir uma função tradicional.

O lado negativo é que funções lambda podem possuir uma única expressão em seu corpo. Funções definidas com def, por outro lado, podem incluir lógicas muito mais complexas, descritas em diversas linhas com condicionais, loops e os demais mecanismos da linguagem Python.

Como usar lambda em Python?

Agora que conhecemos as funções lambda em Python com profundidade, vamos ver alguns exemplos práticos onde podemos aplicá-las.

Usar uma função lambda para ordenar uma lista

Para ordenar uma lista, a função sorted pode ser combinada com uma função lambda para definir um critério de ordenação customizado. Isso permite que elementos “incomparáveis”, como números e strings, ordenem-se de acordo com uma lógica qualquer.

No exemplo abaixo, a função lambda faz com que os strings da lista mista se ordenem de acordo com o número de caracteres, permitindo a ordenação junto aos demais números da lista:

lista_mista = [3, 'texto', 1.1, 'a', 25]

lista_ordenada = sorted(
    lista_mista,
    key=lambda x: len(x) if isinstance(x, str) else x
)

print(lista_ordenada)
# output: ['a', 1.1, 3, 'texto', 25]
Testar

Usar uma função lambda para ordenar um dicionário

Se tentarmos passar um dicionário de Python para a função sorted, ele será ordenado pelas suas chaves. Se, no lugar disso, quisermos ordená-lo pelos seus valores, podemos passar as tuplas de pares chave-valor para a função sorted, junto a uma função lambda que indica a lógica de ordenamento:

notas = {'Ana': 9, 'Beto': 7, 'Carlos': 8}

notas_ordenadas = sorted(
    notas.items(),
    key=lambda tupla: tupla[1]
)

print(notas_ordenadas)
# output: [('Beto', 7), ('Carlos', 8), ('Ana', 9)]
Testar

Na função lambda acima, a variável tupla representa cada tupla de par chave-valor do dicionário, e a lógica tupla[1] indica que o segundo elemento dessa tupla (o valor de cada par chave-valor) deve ser usada para o ordenamento.

Usar uma função lambda com as funções map e filter

A função map pode ser utilizada junto a uma função lambda para aplicar a operação a cada item de uma lista:

numeros = [1, 2, 3]
duplicados = list(map(lambda x: x * 2, numeros))

print(duplicados)
# output: [2, 4, 6]
Testar

De forma semelhante, a função filter pode ser usada para filtrar elementos de uma lista que atendam a um critério de verdadeiro/falso definido pela função lambda:

numeros = [1, 2, 3]
pares = list(filter(lambda x: x % 2 == 0, numeros))

print(pares)
# output: [2]
Testar

Usar uma função lambda em um DataFrame

Ao usar a bilbioteca Pandas, a principal biblioteca de análise de dados em Python, as funções lambda são úteis para definir e aplicar lógicas customizadas a colunas de DataFrames:

import pandas as pd

# Criando um DataFrame de exemplo
df = pd.DataFrame({
    'Produto': ["Camiseta", "Calça", "Tênis"],
    'Preco': [100, 150, 200],
})

print(df)

# output:
#     Produto  Preco
# 0  Camiseta    100
# 1     Calça    150
# 2     Tênis    200

df['ComDesconto'] = df['Preco'].apply(lambda x: x * 0.9)
print(df)

# output:
#     Produto  Preco  ComDesconto
# 0  Camiseta    100         90.0
# 1     Calça    150        135.0
# 2     Tênis    200        180.0
Testar

Neste código, a função lambda aplicada com df['Preco'].apply() realiza um cálculo que multiplica o preço original em 0.9, efetivamente aplicando um desconto de 10%. Isso demonstra a facilidade e praticidade de usarmos funções lambda em DataFrames do Pandas.

Conclusão

As funções lambda, embora façam parte de um conteúdo mais avançado de Python, são uma parte essencial da linguagem, que qualquer programador experiente deve conhecer e dominar. Se você ainda está iniciando seus passos em Python, recomendamos nosso curso gratuito Python MasterClass, onde você vai de zero ao primeiro dashboard em apenas duas horas.

Continue com a gente da Asimov Academy para mais conteúdo de Python!

Curso Gratuito

Curso gratuito de Python

Do zero ao primeiro projeto em apenas 2 horas

Criar conta gratuita

Comentários

Comentar
Você tem o Acesso Básico.
Libere seu acesso ao suporte dos professores Garanta seu acesso PRO para tirar todas suas dúvidas com nossa equipe.
Seja PRO