Como usar funções do Lambda em Python [With Examples]

Neste tutorial, você aprenderá tudo sobre funções lambda em Python – desde a sintaxe para definir funções lambda até os diferentes casos de uso com exemplos de código.

Em Python, lambdas são funções anônimas que têm uma sintaxe concisa e podem ser usadas com outras funções internas úteis. No final deste tutorial, você terá aprendido como definir funções lambda e quando deve considerar usá-las em vez de funções regulares do Python.

Vamos começar!

Função do Python Lambda: sintaxe e exemplos

Aqui está a sintaxe geral para definir uma função lambda em Python:

lambda parameter(s):return value

Na sintaxe geral acima:

  • lambda é a palavra-chave que você deve usar para definir uma função lambda, seguida por um ou mais parâmetros que a função deve ter.
  • Há dois pontos separando os parâmetros e o valor de retorno.

💡 Ao definir uma função lambda, você deve garantir que o valor de retorno seja calculado avaliando uma expressão que abrange uma única linha de código. Você entenderá isso melhor quando codificarmos exemplos.

Exemplos de funções do Python Lambda

A melhor maneira de entender as funções lambda é começar reescrevendo as funções regulares do Python como funções lambda.

👩🏽‍💻 Você pode codificar junto em um Python REPL ou no editor Python online do etechpt.com.

#1. Considere a seguinte função square(), que recebe um número, num, como argumento e retorna o quadrado do número.

def square(num):
    return num*num

Você pode chamar a função com argumentos e verificar se está funcionando corretamente.

>>> square(9)
81
>>> square(12)
144

Você pode atribuir essa expressão lambda a um nome de variável, digamos, square1 para tornar a definição da função mais concisa: square1 = lambda num: num*num e, em seguida, chamar a função square1 com qualquer número como argumento. No entanto, sabemos que lambdas são funções anônimas, portanto, evite atribuí-las a uma variável.

Para a função square(), o parâmetro é num e o valor de retorno é num*num. Depois de identificá-los, podemos conectá-los à expressão lambda e chamá-la com um argumento, conforme mostrado:

>>> (lambda num: num*num)(2)
4

Este é o conceito de Expressão de Função Invocada Imediatamente, onde chamamos uma função logo após defini-la.

#2. Em seguida, vamos reescrever outra função simples add() que leva em números, num1 e num2, e retorna sua soma, num1 + num2.

def add(num1,num2):
    return num1 + num2

Vamos chamar a função add() com dois números como argumentos:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

Nesse caso, num1 e num2 são os dois parâmetros e o valor de retorno é num1 + num2.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

As funções do Python também podem receber valores padrão para parâmetros. Vamos modificar a definição da função add() e definir o valor padrão do parâmetro num2 para 10.

def add(num1, num2=10):
    return num1 + num2

Nas seguintes chamadas de função:

  • Na primeira chamada de função, o valor de num1 é 1 e o valor de num2 é 3. Quando você passa o valor de num2 na chamada de função, esse valor é usado; a função retorna 4.
  • No entanto, se você passar apenas um argumento (num1 é 7), o valor padrão de 10 será usado para num2; a função retorna 17.
>>> add(1,3)
4
>>> add(7)
17

Ao escrever funções que aceitam valores padrão para determinados parâmetros como expressões lambda, você pode especificar o valor padrão ao definir os parâmetros.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Quando você deve usar funções Lambda em Python?

Agora que você aprendeu o básico das funções lambda em Python, aqui estão alguns casos de uso:

  • Quando você tem uma função cuja expressão de retorno é uma única linha de código e não precisa fazer referência à função em outro lugar no mesmo módulo, pode usar funções lambda. Também codificamos alguns exemplos para entender isso.
  • Você pode usar funções lambda ao usar funções internas, como map(), filter() e reduce().
  • As funções do Lambda podem ser úteis na classificação de estruturas de dados do Python, como listas e dicionários.
  Como corrigir Kernel_task alta CPU em um Mac

Como usar o Python Lambda com funções internas

1. Usando Lambda com map()

A função map() recebe um iterável e uma função e aplica a função a cada item no iterável, conforme mostrado:

Vamos criar uma lista nums e usar a função map() para criar uma nova lista que contém o quadrado de cada número na lista nums. Observe o uso da função lambda para definir a operação de quadratura.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Como a função map() retorna um objeto de mapa, devemos convertê-lo em uma lista.

▶️ Confira este tutorial sobre a função map() em Python.

2. Usando Lambda com filtro()

Vamos definir nums, uma lista de números:

>>> nums = [4,5,6,9]

Suponha que você queira filtrar essa lista e reter apenas os números ímpares.

Você pode usar a função filter() integrada do Python.

A função filter() recebe uma condição e um iterável: filter(condition, iterable). O resultado contém apenas os elementos no iterável original que satisfazem a condição. Você pode converter o objeto retornado em um iterável do Python, como list.

  8 incrível painel de controle de hospedagem na web e software de gerenciamento de servidor

Para filtrar todos os números pares, reteremos apenas os números ímpares. Portanto, a expressão lambda deve ser lambda num: num%2!=0. A quantidade num%2 é o resto quando num é dividido por 2.

  • num%2!=0 é True sempre que num for ímpar, e
  • num%2!=0 é False sempre que num for par.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Usando Lambda com reduce()

A função reduce() recebe um iterável e uma função. Ele reduz o iterável aplicando a função iterativamente nos itens do iterável.

Para usar a função reduce(), você terá que importá-la do módulo functools integrado do Python:

>>> from functools import reduce

Vamos usar a função reduce() para calcular a soma de todos os números na lista nums. Definimos uma expressão lambda: lambda num1,num2:num1+num2, como a função de soma redutora.

A operação de redução ocorrerá assim: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Aqui, f é a operação de soma em dois itens da lista, definida pela função lambda.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

Funções do Python Lambda para personalizar a classificação

Além de usar funções lambda com funções internas do Python, como map(), filter() e reduce(), você também pode usá-las para personalizar funções internas e métodos usados ​​para classificação.

1. Classificando listas do Python

Ao trabalhar com listas do Python, muitas vezes você terá que classificá-las com base em determinados critérios de classificação. Para classificar as listas do Python no local, você pode usar o método sort() embutido nelas. Se você precisar de uma cópia ordenada da lista, você pode usar a função sorted().

A sintaxe para usar a função sorted() do Python é sorted(iterable, key=…,reverse= True | False).

– O parâmetro chave é usado para personalizar a classificação.
– O parâmetro reverse pode ser definido como True ou False; O valor padrão é falso.

Ao classificar listas de números e strings, a classificação padrão é em ordem crescente e alfabética, respectivamente. No entanto, às vezes você pode querer definir algum critério personalizado para classificação.

Considere as seguintes frutas da lista. Suponha que você queira obter uma cópia ordenada da lista. Você deve classificar as strings de acordo com o número de ocorrências de ‘p’ nelas – em ordem decrescente.

>>> fruits = ['apple','pineapple','grapes','mango']

É hora de usar o parâmetro de chave opcional. Uma string é iterável em Python e para obter o número de ocorrências de um caractere nela, você pode usar o método .count() integrado. Então definimos a chave para lambda x:x.count(‘p’) para que a classificação seja baseada no número de vezes que ‘p’ ocorre na string.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

Neste exemplo:

  • A chave para classificar é o número de ocorrências do caractere ‘p’ e é definido como uma expressão lambda.
  • Como configuramos o parâmetro reverse para True, a classificação ocorre na ordem decrescente do número de ocorrências de ‘p’.
  7 geradores de nomes de clãs de jogos para seu esquadrão

Na lista de frutas, ‘abacaxi’ contém 3 ocorrências de ‘p’, e as strings ‘maçã’, ‘uvas’ e ‘manga’ contêm 2, 1 e 0 ocorrências de ‘p’, respectivamente.

Entendendo a classificação estável

Considere outro exemplo. Para o mesmo critério de ordenação, redefinimos a lista de frutas. Aqui, ‘p’ ocorre nas strings ‘apple’ e ‘grapes’ duas e uma vez, respectivamente. E isso nunca ocorre nas cordas ‘mango’ e ‘melon’.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

Na lista de saída, ‘mango’ vem antes de ‘melon’ mesmo que ambos não tenham o caractere ‘p’. Mas por que é este o caso? A função sorted() executa uma classificação estável; então quando a contagem de ‘p’ é igual para duas strings, a ordem dos elementos na lista de frutas original é preservada.

Como exercício rápido, troque as posições de ‘manga’ e ‘melão’ na lista de frutas, ordene a lista com base no mesmo critério e observe a saída.

▶️ Saiba mais sobre como classificar listas do Python.

2. Classificando um dicionário Python

Você também pode usar lambdas ao classificar dicionários Python. Considere o seguinte dicionário price_dict que contém itens e seus preços.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

Para obter os pares chave-valor de um dicionário como uma lista de tuplas, você pode usar o método de dicionário integrado .items():

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

Em Python, todos os iteráveis: listas, tuplas, strings e mais, seguem a indexação zero. Assim, o primeiro item está no índice 0, o segundo item está no índice 1 e assim por diante.

Gostaríamos de classificar pelo valor, que é o preço de cada item no dicionário. Em cada tupla na lista price_dict_items, o item no índice 1 é o preço. Então definimos a chave para lambda x:x[1] pois usará o item no índice 1, o preço, para classificar o dicionário.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

Na saída, os itens do dicionário foram classificados em ordem crescente de preços: começando com ‘Candy’, com preço de 3 unidades, até ‘Honey’, com preço de 15 unidades.

▶️ Para saber mais, confira este guia detalhado sobre como classificar um dicionário Python por chave e valor.

Resumindo

E aí está! Você aprendeu como definir funções lambda e usá-las efetivamente com outras funções internas do Python. Aqui está um resumo das principais conclusões:

  • Em Python, lambdas são funções anônimas que podem receber vários argumentos e retornar um valor; a expressão a ser avaliada para gerar esse valor de retorno deve ser uma linha de código. Eles podem ser usados ​​para tornar as definições de pequenas funções mais concisas.
  • Para definir a função Lambda, você pode usar a sintaxe: parâmetro(s) lambda: valor de retorno.
  • Alguns dos casos de uso importantes incluem usá-los com funções map(), filter() e reduce() e como o parâmetro-chave para personalizar a classificação de iteráveis ​​do Python.

Em seguida, aprenda como realizar a divisão de piso em Python.