Expressões Lambda em Python

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 defpalavra-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: expressionLinguagem de código:  Python  ( python )

É equivalente à seguinte função sem o "anonymous"nome:

def anonymous(parameters):
    return expressionLinguagem 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, a formatterfunçã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, JohnLinguagem de código:  Python  ( python )

Saída:

John Doe
Doe, JohnLinguagem de código:  Python  ( python )

Em vez de definir as funções first_laste last_first, você pode usar expressões lambda.

Por exemplo, você pode expressar a first_lastfunçã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_firstfunçã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, JohnLinguagem 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 * nLinguagem 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, doubletambé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
6Linguagem 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))  # 9Linguagem 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 à ivariá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 ivariá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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *