Função lambda da gramática avançada do Python
Em Python, lambda
as funções também são conhecidas como funções anônimas, que são um atalho para definir funções simples. lambda
As funções, como as funções comuns, podem receber qualquer número de argumentos, mas podem ter apenas uma expressão. lambda
Neste artigo, apresentaremos as funções do Python em detalhes com exemplos e explicações detalhadas .
Sintaxe básica das funções lambda
lambda
A sintaxe básica de uma função é a seguinte:
lambda arguments: expression
onde arguments
é um ou mais parâmetros e expression
é uma expressão sobre esses parâmetros. lambda
O valor de retorno da função é expression
o valor de .
Por exemplo, a lambda
função a seguir recebe um argumento x
e retorna x
o quadrado:
square = lambda x: x ** 2
print(square(5)) # Output: 25
Finalidade da função lambda
lambda
As funções geralmente são usadas quando uma função pequena é necessária, mas você não def
deseja definir uma função. Por exemplo, lambda
as funções costumam ser usadas como argumentos para funções de ordem superior, como map()
e filter()
.
map(function, iterable)
Uma função recebe uma função e um iterável e retorna um novo iterador que aplica a função a cada elemento do iterável. Por exemplo, o código a seguir usa summap()
paralambda
elevar ao quadrado cada número em uma lista:
numbers = [1, 2, 3, 4, 5]
squares = map(lambda x: x ** 2, numbers)
print(list(squares)) # Output: [1, 4, 9, 16, 25]
filter(function, iterable)
A função também recebe uma função e um objeto iterável e retorna umTrue
novo iterador contendo todos os elementos para os quais a função retorna um valor. Por exemplo, o código a seguir usafilter()
elambda
para filtrar todos os números ímpares em uma lista:
numbers = [1, 2, 3, 4, 5]
odds = filter(lambda x: x % 2 != 0, numbers)
print(list(odds)) # Output: [1, 3, 5]
funções lambda e classificação
lambda
As funções também são comumente usadas em operações de classificação em listas ou outras estruturas de dados. As funções internas sorted()
e os métodos de lista do Python sort()
fornecem um key
parâmetro opcional chamado, por meio do qual podemos especificar uma função para determinar a base da classificação.
Por exemplo, suponha que temos uma lista cujos elementos são dicionários e queremos classificar pelo valor de uma determinada chave no dicionário:
students = [
{
'name': 'John', 'grade': 90},
{
'name': 'Jane', 'grade': 88},
{
'name': 'Dave', 'grade': 92},
]
# 使用lambda函数,按照'grade'键进行排序
students_sorted = sorted(students, key=lambda x: x['grade'])
print(students_sorted)
# Output: [{'name': 'Jane', 'grade': 88}, {'name': 'John', 'grade': 90}, {'name': 'Dave', 'grade': 92}]
Neste exemplo, lambda x: x['grade']
a função usa um dicionário como entrada e retorna o valor correspondente à chave 'nota' no dicionário. sorted()
A função usará esse valor de retorno como base para a classificação.
Limitações das funções lambda
Embora lambda
as funções possam nos ajudar a definir rapidamente funções simples, elas também têm algumas limitações:
lambda
Uma função pode conter apenas uma expressão e não pode conter lógica complexa ou várias instruções.lambda
As funções não podem conter blocos de instrução, comoif/else
,for
,while
etc.lambda
As funções não podem acessar variáveis em escopos externos (a menos que essas variáveis sejam globais).
Apesar dessas limitações, lambda
as funções ainda são muito úteis onde funções leves são desejadas. Dominar lambda
o uso de funções é um grande benefício para melhorar suas habilidades de programação em Python.
função lambda e função reduzir
O módulo Python functools
fornece uma reduce()
função que aplica uma função binária sequencial a todos os elementos de uma sequência, mesclando as sequências em uma única saída. Esse tipo de operação costuma ser muito comum em linguagens de programação funcional e também é um cenário comum para funções lambda.
Por exemplo, se queremos calcular o produto de todos os elementos de uma lista, podemos usar a reduce()
função lambda sum:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # Output: 120
Neste exemplo, lambda x, y: x * y
a função recebe dois argumentos e retorna seu produto. reduce()
As funções usam essa função para processar sequencialmente os elementos da lista para calcular seu produto.
Vantagens e desvantagens das funções lambda
Antes de terminar este artigo, vamos resumir as vantagens e desvantagens das funções lambda.
vantagem:
- Concisão: as funções lambda nos permitem definir funções em uma linha de código, tornando o código mais conciso.
- Conveniência: as funções lambda podem ser passadas diretamente como parâmetros para funções de ordem superior sem a necessidade de defini-las antecipadamente.
- Adequado para lógica simples: para funções com lógica simples, usar funções lambda é mais intuitivo do que funções definidas por definição.
deficiência:
- Funcionalidade limitada: como as funções lambda podem ter apenas uma expressão, a lógica complexa não pode ser implementada.
- Legibilidade: se a função lambda for abusada ou usada para implementar uma lógica mais complexa, pode reduzir a legibilidade do código.
função lambda e função reduzir
O módulo Python functools
fornece uma reduce()
função que aplica uma função binária sequencial a todos os elementos de uma sequência, mesclando as sequências em uma única saída. Esse tipo de operação costuma ser muito comum em linguagens de programação funcional e também é um cenário comum para funções lambda.
Por exemplo, se queremos calcular o produto de todos os elementos de uma lista, podemos usar a reduce()
função lambda sum:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # Output: 120
Neste exemplo, lambda x, y: x * y
a função recebe dois argumentos e retorna seu produto. reduce()
As funções usam essa função para processar sequencialmente os elementos da lista para calcular seu produto.
Vantagens e desvantagens das funções lambda
Antes de terminar este artigo, vamos resumir as vantagens e desvantagens das funções lambda.
vantagem:
- Concisão: as funções lambda nos permitem definir funções em uma linha de código, tornando o código mais conciso.
- Conveniência: as funções lambda podem ser passadas diretamente como parâmetros para funções de ordem superior sem a necessidade de defini-las antecipadamente.
- Adequado para lógica simples: para funções com lógica simples, usar funções lambda é mais intuitivo do que funções definidas por definição.
deficiência:
- Funcionalidade limitada: como as funções lambda podem ter apenas uma expressão, a lógica complexa não pode ser implementada.
- Legibilidade: se a função lambda for abusada ou usada para implementar uma lógica mais complexa, pode reduzir a legibilidade do código.
Função lambda com vários parâmetros
As funções que vimos antes aceitam lambda
apenas um ou dois parâmetros. No entanto, lambda
as funções também podem aceitar qualquer número de argumentos. Por exemplo:
f = lambda x, y, z: x + y + z
print(f(1, 2, 3)) # Output: 6
Esta lambda
função recebe três parâmetros e retorna sua soma.
Você pode até usar argumentos variáveis (também conhecidos como "varargs"):
f = lambda *args: sum(args)
print(f(1, 2, 3, 4, 5)) # Output: 15
Esta lambda
função recebe qualquer número de argumentos e retorna sua soma.
funções lambda e programação funcional
Na programação funcional, as funções são consideradas cidadãs de primeira classe e podem ser atribuídas a variáveis, passadas como parâmetros para outras funções e retornadas como valores de outras funções. Esse paradigma de programação incentiva o uso de funções puras sem efeitos colaterais, bem como funções de ordem superior como map()
, e .filter()
reduce()
lambda
As funções são uma personificação da programação funcional em Python. Ao combinar lambda
funções e funções de ordem superior, podemos escrever um código muito conciso e elegante.
Por exemplo, o código a seguir usa a função map()
e lambda
para converter todos os elementos de uma lista em strings:
numbers = [1, 2, 3, 4, 5]
strings = map(lambda x: str(x), numbers)
print(list(strings)) # Output: ['1', '2', '3', '4', '5']
Em geral, lambda
as funções são um recurso muito poderoso em Python, que nos permite escrever código de forma mais rápida e concisa. No entanto, observe também que, se lambda
a lógica da função for muito complexa, pode reduzir a legibilidade do código. Portanto, lambda
as funções são mais bem usadas para implementar lógica simples.
Argumentos padrão e argumentos de palavra-chave
Como as funções normais, as funções lambda podem ter argumentos padrão e argumentos de palavra-chave:
f = lambda x, y=2, *, z=3: x + y + z
print(f(1)) # Output: 6
print(f(1, 4, z=5)) # Output: 10
Neste exemplo, lambda
a função tem dois parâmetros posicionais x
e y
, y
com um valor padrão de 2. z
é um argumento de palavra-chave com um valor padrão de 3.
funções lambda e decoradores
Embora em Python os decoradores sejam geralmente def
definidos usando uma sintaxe, lambda
as funções também podem ser usadas para criar decoradores simples.
Por exemplo, o código a seguir define um decorador que multiplica o resultado de uma função por 2:
double_result = lambda f: lambda *args, **kwargs: 2 * f(*args, **kwargs)
@double_result
def add(x, y):
return x + y
print(add(1, 2)) # Output: 6
Nesse caso, double_result
um decorador que pega uma função f
e retorna uma nova função que retorna f
o dobro do resultado.
epílogo
Este artigo fornece uma introdução detalhada às funções em Python lambda
, incluindo sua sintaxe, finalidade e alguns casos de uso comuns. lambda
As funções são uma ferramenta poderosa em Python que pode tornar seu código mais conciso e elegante. Embora lambda
uma função tenha algumas restrições, como conter apenas uma única expressão, em muitos casos isso é suficiente.
Espero que este artigo possa ajudá-lo a entender e dominar funções em Python lambda
e tornar sua jornada de programação em Python mais tranquila. Lembre-se, a melhor maneira de aprender é fazendo, então tente escrever algumas lambda
funções agora e veja o que você pode fazer.