quarta-feira, 27 de janeiro de 2021

Funções Lambda em Python

Em Python, uma função anônima significa que uma função não tem nome. Como já sabemos, a palavra-chave def é usada para definir uma função normal em Python. Da mesma forma, a palavra-chave lambda é usada para definir uma função anônima em Python. Possui a seguinte sintaxe: 

Sintaxe: argumentos lambda: expressão
  • Essa função pode ter qualquer número de argumentos, mas apenas uma expressão, que é avaliada e retornada.
  • Um é livre para usar funções lambda sempre que os objetos de função são necessários.
  • Você precisa estar ciente de que as funções lambda são sintaticamente restritas a uma única expressão.
  • Ele tem vários usos em campos específicos de programação, além de outros tipos de expressões em funções.

Vamos examinar este exemplo e tentar entender a diferença entre uma função definida por def normal e uma função lambda. Este é um programa que retorna o cubo de um determinado valor:

# Código Python para ilustrar o cubo de um número
# mostrando a diferença entre def () e lambda (). 
def cube(y): 
    return y*y*y 
  
lambda_cube = lambda y: y*y*y 
  
# usando a definição normal de uma função
print(cube(5)) 
  
# usando uma função lambda
print(lambda_cube(5)) 

Resultado:

125
125

Como podemos ver no exemplo acima, a função cube() e lambda_cube() se comportam da mesma forma e conforme pretendido. Vamos analisar o exemplo acima um pouco mais:

  • Sem usar Lambda: aqui, ambos retornam o cubo de um determinado número. Mas, ao usar def, precisamos definir uma função com um cubo de nome e passar um valor para ele. Após a execução, também precisamos retornar o resultado de onde a função foi chamada usando a palavra-chave return .
  • Usando Lambda: a definição de Lambda não inclui uma declaração de “retorno”, ela sempre contém uma expressão que é retornada. Também podemos colocar uma definição lambda em qualquer lugar em que uma função seja esperada e não precisamos atribuí-la a nenhuma variável. Essa é a simplicidade das funções lambda.

As funções lambda podem ser usadas junto com funções integradas como filter(), map() e reduce().

Usando a função lambda() com filter()

A função filter() em Python recebe uma função e uma lista como argumentos. Isso oferece uma maneira elegante de filtrar todos os elementos de uma sequência “sequência”, para a qual a função retorna True. Aqui está um pequeno programa que retorna os números ímpares de uma lista de entrada: 
 

Exemplo 1:

# Código python para ilustrar o uso de
# filter() com lambda() 
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61] 
  
final_list = list(filter(lambda x: (x%2 != 0) , li)) 
print(final_list) 

Resultado:

[5, 7, 97, 77, 23, 73, 61]

Exemplo 2:

# Pessoas acima de 18 anos
ages = [13, 90, 17, 59, 21, 60, 5] 
  
adults = list(filter(lambda age: age>18, ages)) 
  
print(adults)

Resultado:

[90, 59, 21, 60]

Usando a função lambda() com map()

A função map() em Python recebe uma função e uma lista como argumento. A função é chamada com uma função lambda e uma lista e uma nova lista é retornada que contém todos os itens modificados por lambda retornados por aquela função para cada item. Exemplo: 
 

Exemplo 1:

# Código python para ilustrar o funcionamento da função
# map() com lambda() 
# para obter o dobro de uma lista
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61] 
  
final_list = list(map(lambda x: x*2, li)) 
print(final_list) 

Resultado:

[10, 14, 44, 194, 108, 124, 154, 46, 146, 122]

Exemplo 2:

# Python program to demonstrate 
# use of lambda() function 
# with map() function 
animals = ['cão', 'gato', 'papagaio', 'coelho'] 
  
# aqui pretendemos mudar todos os nomes de animais
# para maiúsculas e retorna o mesmo
uppered_animals = list(map(lambda animal: str.upper(animal), animals)) 
  
print(uppered_animals)

Resultado:

['CÃO', 'GATO', 'PAPAGAIO', 'COELHO']

Usando a função lambda() com reduce()

A função reduce() em Python leva em uma função e uma lista como um argumento. A função é chamada com uma função lambda e um iterável e um novo resultado reduzido é retornado. Isso executa uma operação repetitiva sobre os pares do iterável. A função reduce() pertence ao módulo functools

Exemplo 1:

# Código Python para ilustrar a reduce()
# com lambda() para obter a soma de uma lista
  
from functools import reduce
li = [5, 8, 10, 20, 50, 100] 
sum = reduce((lambda x, y: x + y), li) 
print (sum) 

Resultado:

193

Aqui, os resultados dos dois elementos anteriores são adicionados ao próximo elemento e isso continua até o final da lista como (((((5+8)+10)+20)+50)+100).

Exemplo 2:

# código python para demonstrar o funcionamento de reduce()
# com uma função lambda

import functools  
  
# initializing list  
lis = [ 1 , 3, 5, 6, 2, ]  
  
# usando reduce para calcular o elemento máximo da lista
print("O elemento máximo da lista é: ",end="")  
print(functools.reduce(lambda a,b : a if a > b else b,lis))  

Resultado:

O elemento máximo da lista é: 6

Este artigo é uma contribuição de Chinmoy Lenka.

Artigo escrito por GeeksforGeeks e traduzido por Acervo Lima de Python Lambda Functions.

0 comentários:

Postar um comentário