Resumo : neste tutorial, você aprenderá sobre expressões lambda do Python e como usá-las para escrever funções anônimas.
Às vezes, você precisa escrever uma função simples que contenha uma expressão. No entanto, você precisa usar esta função uma vez. E será desnecessário definir essa função com a def
palavra-chave.
É aí que as expressões lambda do Python entram em ação.
O que são expressões lambda do Python
As expressões lambda do Python permitem definir funções anônimas.
Funções anônimas são funções sem nomes. As funções anônimas são úteis quando você precisa usá-las uma vez.
Uma expressão lambda normalmente contém um ou mais argumentos, mas pode ter apenas uma expressão .
O seguinte mostra a sintaxe da expressão lambda:
lambda parameters: expression
Linguagem de código: Python ( python )
É equivalente à seguinte função sem o "anonymous"
nome:
def anonymous(parameters):
return expression
Linguagem de código: Python ( python )
Exemplos de expressões lambda em Python
Em Python, você pode passar uma função para outra função ou retornar uma função de outra função.
1) Funções que aceitam um exemplo de função
O seguinte define uma função chamada get_full_name()
que formata o nome completo do nome e do sobrenome:
def get_full_name(first_name, last_name, formatter):
return formatter(first_name, last_name)
Linguagem de código: Python ( python )
A get_full_name()
função aceita três argumentos:
- Primeiro nome (
first_name
) - Sobrenome (
last_name
) - Uma função que formatará o nome completo (
formatter
). Por sua vez, aformatter
função aceita dois argumentos, nome e sobrenome.
A seguir são definidas duas funções que retornam um nome completo do nome e do sobrenome em formatos diferentes:
def first_last(first_name, last_name):
return f"{first_name} {last_name}"
def last_first(first_name, last_name):
return f"{last_name}, {first_name}"
Linguagem de código: Python ( python )
E isso mostra como chamar a get_full_name()
função passando o nome, o sobrenome e as funções first_last
/ :last_first
full_name = get_full_name('John', 'Doe', first_last)
print(full_name) # John Doe
full_name = get_full_name('John', 'Doe', last_first)
print(full_name) # Doe, John
Linguagem de código: Python ( python )
Saída:
John Doe
Doe, John
Linguagem de código: Python ( python )
Em vez de definir as funções first_last
e last_first
, você pode usar expressões lambda.
Por exemplo, você pode expressar a first_last
função usando a seguinte expressão lambda:
lambda first_name,last_name: f"{first_name} {last_name}"
Linguagem de código: Python ( python )
Esta expressão lambda aceita dois argumentos e os concatena em uma string formatada na ordem first_name
, espaço e last_name
.
E o seguinte converte a last_first
função usando uma expressão lambda que retorna o nome completo no formato: sobrenome, espaço e nome:
lambda first_name, last_name: f"{last_name} {first_name}";
Linguagem de código: Python ( python )
Usando expressões lambda, você pode chamar a get_full_name()
função da seguinte maneira:
def get_full_name(first_name, last_name, formatter):
return formatter(first_name, last_name)
full_name = get_full_name(
'John',
'Doe',
lambda first_name, last_name: f"{first_name} {last_name}"
)
print(full_name)
full_name = get_full_name(
'John',
'Doe',
lambda first_name, last_name: f"{last_name} {first_name}"
)
print(full_name)
Linguagem de código: Python ( python )
Saída:
John Doe
Doe, John
Linguagem de código: Python ( python )
2) Funções que retornam um exemplo de função
A times()
função a seguir retorna uma função que é uma expressão lambda:
def times(n):
return lambda x: x * n
Linguagem de código: Python ( python )
E este exemplo mostra como chamar a times()
função:
double = times(2)
Linguagem de código: Python ( python )
Como a times()
função retorna uma função, double
também é uma função. Para chamá-lo, você coloca parênteses assim:
result = double(2)
print(result)
result = double(3)
print(result)
Linguagem de código: Python ( python )
Saída:
4
6
Linguagem de código: Python ( python )
O seguinte mostra outro exemplo de uso da times()
função:
triple = times(3)
print(triple(2)) # 6
print(triple(3)) # 9
Linguagem de código: Python ( python )
Python lambda em um loop
Veja o exemplo a seguir:
callables = []
for i in (1, 2, 3):
callables.append(lambda: i)
for f in callables:
print(f())
Linguagem de código: PHP ( php )
Como funciona.
- Primeiro, defina uma lista com o nome callables.
- Segundo, itere de 1 a 3, crie uma nova expressão lambda em cada iteração e adicione-a à lista de chamadas.
- Terceiro, faça um loop sobre os callables e chame cada função.
O resultado esperado será:
1
2
3
No entanto, o programa mostra a seguinte saída:
3
3
3
O problema é que todas as expressões lambda fazem referência à i
variável, não ao valor atual de i
. Quando você chama as expressões lambda, o valor da variável i
é 3.
Para corrigir isso, você precisa vincular a i
variável a cada expressão lambda no momento em que a expressão lambda é criada. Uma maneira de fazer isso é usar o argumento padrão :
callables = []
for i in (1, 2, 3):
callables.append(lambda a=i: a)
for f in callables:
print(f())
Linguagem de código: PHP ( php )
Neste exemplo, o valor de a é avaliado no momento em que a expressão lambda é criada. Portanto, o programa retorna a saída esperada.
Resumo
- Use expressões lambda do Python para criar funções anônimas, que são funções sem nomes.
- Uma expressão lambda aceita um ou mais argumentos, contém uma expressão e retorna o resultado dessa expressão.
- Use expressões lambda para passar funções anônimas para uma função e retornar uma função de outra função.