[Co-construcción del árbol de habilidades de Python] expresión lambda

¿Qué es una expresión lambda de Python?

Una expresión lambda también se denomina función anónima . Al definirla, no hay un nombre específico. Generalmente se usa para definir rápidamente una función de una sola línea. Echemos un vistazo al uso básico:

fun = lambda x:x+1
print(fun(1))

Mirando el código anterior, encontrará que una línea de funciones se define mediante una expresión lambda, sin un nombre de función, seguida de la función de la función, xque +1opera en .
Para ordenar un poco la sintaxis:

lambda [参数列表]:表达式
# 英文语法格式
lambda [arg1[,arg2,arg3....argN]]:expression

Hay algunas advertencias en el formato de sintaxis:

  1. Las expresiones lambda deben definirse utilizando la palabra clave lambda;
  2. Después de la palabra clave lambda y antes de los dos puntos hay una lista de parámetros. El número de parámetros puede ser de 0 a cualquier número. Varios parámetros están separados por comas y, a la derecha de los dos puntos, se encuentra el valor de retorno de la expresión lambda.

El código al comienzo de este artículo, si desea reescribirlo en una forma de función general, corresponde a lo siguiente:

fun = lambda x:x+1
# 改写为函数形式如下:
def fun(x):return x+1

Por supuesto, si decide que lo anterior fun()también es redundante, la función anónima no debería tener estos contenidos redundantes.También puede escribirlo de la siguiente manera,
pero la legibilidad del código será menor.

print((lambda x:x+1)(1))

Las expresiones lambda generalmente se usan para funciones que no necesitan usarse varias veces, y el espacio ocupado por la función se libera después de su uso.

cómo utilizar

Diferencia entre la expresión lambda y la función definida por definición

El primer punto: uno con un nombre de función, uno sin un nombre de función

El segundo punto: :después de

Solo puede haber una expresión y se producirán múltiples errores, es decir, no aparecerá el siguiente código.

# 都是错误的
lambda x:x+1 x+2

Por esta razón, muchas personas también se refieren a las expresiones lambda como funciones de expresión única .

Tercer punto: la declaración for no se puede usar en una lambda

En algunos lugares, está escrito que si las declaraciones y las declaraciones de impresión no se pueden usar en expresiones lambda, la descripción no es precisa, por ejemplo, el siguiente código es correcto.

lambda a: 1 if a > 10 else 0

La conclusión básica es que una expresión lambda solo puede contener una expresión y no puede contener declaraciones complejas, y el resultado de la operación de la expresión es el valor de retorno de la función.

Cuarto punto: las expresiones lambda no se pueden compartir con otras llamadas de programa

Quinto punto: las expresiones lambda se pueden usar como valores de otros tipos de datos,
por ejemplo, en el siguiente código, no hay problema con las expresiones lambda.

my_list = [lambda a: a**2, lambda b: b**2]
fun = my_list[0]
print(fun(2))

escenarios de aplicación de expresión lambda

En escenarios de codificación específicos, las aplicaciones comunes de las expresiones lambda son las siguientes:

1. Asigne la expresión lambda a una variable y luego llame a la variable
La mayor parte de la escritura mencionada anteriormente tiene este uso.

fun = lambda a: a**2
print(fun(2))

2. Asigne expresiones lambda a otras funciones, reemplazando así las funciones de otras funciones.
Generalmente, este es el caso para proteger ciertas funciones, por ejemplo, las sortedfunciones integradas .

sorted = lambda *args:None
x = sorted([3,2,1])
print(x)

3. Pasar expresiones lambda como parámetros a otras funciones
En algunas funciones, las funciones anónimas son aceptables en la configuración de funciones, como el siguiente código de clasificación:

my_list = [(1, 2), (3, 1), (4, 0), (11, 4)]
my_list.sort(key=lambda x: x[1])
print(my_list)

my_listLa variable llama a la sortfunción y al parámetro se keyle asigna una expresión lambda
que dice ordenar por el segundo elemento de cada elemento de la lista.

4. Aplique expresiones lambda a funciones de orden superior de filtro, mapa y reducción.
Este es un lugar para cavar un pequeño hoyo, y puede expandirse y aprender por sí mismo.

5. Aplique la expresión lambda al valor de retorno de la función.
Esta técnica lleva a la conclusión de que el valor de retorno de la función también es una función. El código de prueba específico es el siguiente:

def fun(n):
    return lambda x:x+n

new_fun = fun(2)
print(new_fun)
# 输出内容:<function fun.<locals>.<lambda> at 0x00000000028A42F0>

En el código anterior, la expresión lambda es en realidad una función definida dentro de una función, denominada función anidada o función interna.
En consecuencia, las funciones que contienen funciones anidadas se denominan funciones externas.
Las funciones internas pueden acceder a las variables locales de las funciones externas. Esta característica es la base de la programación de cierre
. En la segunda ronda de Snowballing Python, habrá un blog especial para introducir el conocimiento de la programación de cierre.

ampliar conocimientos

Si bien las expresiones lambda tienen ventajas, las lambdas no deben usarse en exceso, y la última guía de estilo oficial de Python, PEP8, recomienda nunca escribir código como:

normalize_case = lambda s: s.casefold()

Entonces, desea crear una función y almacenarla en una variable, use defpara definirla.

Encapsulación innecesaria
Implementamos una lista ordenada por tamaño absoluto.

my_list = [-1,2,0,-3,1,1,2,5]
sorted_list = sorted(my_list, key=lambda n: abs(n))
print(sorted_list)

Lo anterior parece usar expresiones lambda, pero olvidé que todas las funciones en Python se pueden pasar como parámetros.

my_list = [-1,2,0,-3,1,1,2,5]
sorted_list = sorted(my_list, key=abs)
print(sorted_list)

Es decir, cuando tenemos una función que cumple con los requisitos, no hay necesidad de usar expresiones lambda además.

Supongo que te gusta

Origin blog.csdn.net/hihell/article/details/124433149
Recomendado
Clasificación