Introducción a la programación en Python (014): función Lambda de Python (función anónima)

Introducción a la programación en Python (014): función Lambda de Python (función anónima)

1. Definición de función anónima

Las funciones Lambda son uno de los conceptos centrales en la programación funcional. Python proporciona una manera sencilla de definir funciones lambda. Las funciones anónimas pueden implementar funciones funcionales eficientes en una línea de código sin definir una función. Las funciones anónimas se pueden utilizar directamente en expresiones, lo cual es muy conveniente. El formato de sintaxis de las funciones anónimas es el siguiente:

lambda [arguments] : expression

ilustrar:

(1) argumentos: lista de parámetros formales, múltiples parámetros formales separados por comas o sin parámetros.

La forma de la lista de parámetros formales es la siguiente:

a, b
a=1, b=2
*args
**kwargs
a, b=1, *args

(2) Expresión: la expresión del valor de retorno de la función. Solo puede haber una expresión.

La expresión es de la forma:

6
a + b
sum(b)
6 if a >10 else 7

(3) El valor de retorno de lambda es la dirección de una función, que es el objeto de la función.

Por ejemplo:

fadd = lambda x,y:x+y
print(fadd)
print(fadd(3,2))

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
<function <lambda> at 0x00000266BFC99EE0>
5

2. Características de las funciones anónimas

(1) La función Lambda es anónima

La llamada función anónima, en términos sencillos, es una función sin nombre.

(2) La función Lambda tiene entrada y salida

La entrada es el valor pasado a la lista de parámetros [argumentos] y la salida es el valor calculado en función de la expresión.

(3) La función Lambda tiene su propio espacio de nombres

No puede acceder a parámetros fuera de su propia lista de parámetros o en el espacio de nombres global, y solo puede completar funciones muy simples.

Ejemplos comunes de funciones Lambda:

lambda x, y: x+y			# 函数的输入为x和y,输出是它们的和:x+y
lambda *args: sum(args)		 # 输入是任意个数参数,输出是它们的和
lambda **kwargs: 6			# 输入是任意键值对参数,输出是6

3. Usos comunes de funciones anónimas

1. Llamar después de nombrar

Si solo necesitamos una función simple, lambda es una buena opción y puede considerarse una forma más sencilla de definir una función. Podemos darle un nombre y usarlo como una función normal. La forma de la convocatoria es la siguiente:

fun_name = lambda arguments : expression
fun_name(arguments)

Por ejemplo:

fun_perimeter = lambda r:3.14 * r * 2
fun_area = lambda r:3.14 * r ** 2
print("圆的周长:",fun_perimeter(5))
print("圆的面积:",fun_area(5))

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
圆的周长: 31.400000000000002
圆的面积: 78.5

2. Llama directamente

El formato de sintaxis para llamar directamente a la función lambda es el siguiente:

(lambda arguments : expression)(arguments)

Por ejemplo:

print("圆的周长:",(lambda r:3.14 * r * 2)(5))
print("圆的面积:",(lambda r:3.14 * r ** 2)(5))

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
圆的周长: 31.400000000000002
圆的面积: 78.5

3. Pase la función Lambda como parámetro a otras funciones (generalmente se le da el parámetro clave)

(1) función máx()

La función max() devuelve el valor máximo del parámetro dado, que puede ser una secuencia. El formato de sintaxis de la función max() es el siguiente:

max( x, y, z, .... )

说明:返回给定参数的最大值

Por ejemplo: la función Lambda determina qué valor de la tupla se ordena.

num = [(100, 2.5), (150, 0.2), (80, 3.4), (120, 1.8)]
y = max(num, key=lambda x: x[0])   # 按元组的第1个值排序取最大值
print(y)
y = max(num, key=lambda x: x[1])   # 按元组的第2个值排序取最大值
print(y)

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
(150, 0.2)
(80, 3.4)

(2) función ordenada ()

La función sorted() ordena todos los objetos iterables. El formato de sintaxis de la función sorted() es el siguiente:

sorted(iterable, key=None, reverse=False)
参数说明:
(1)iterable:可迭代对象。
(2)key:指定用来进行比较的元素,指定可迭代对象中的一个元素进行排序。
(3)reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)。
(4)返回值:返回重新排序的列表。

La diferencia entre ordenar y ordenar:

(1) ordenar es un método aplicado a listas, y ordenar puede realizar operaciones de clasificación en todos los objetos iterables.

(2) El método de clasificación de lista opera en una lista existente. La función ordenada devuelve una nueva lista, no una operación basada en la original.

Ejemplo 1: operaciones en listas

num = [2,3,22,102,-87,11,-23]
print(sorted(num))  # 升序排列
print(sorted(num,key=lambda x :abs(x)))  # 按绝对值升序排列,参数x接收的是列表的元素
stu = ["Jerry","Mark","tom","Black","zhangping","Liugang","WANGLIN"]
print(sorted(stu))   # 对名字排序(区分大小写)
print(sorted(stu,key=str.lower))   # 对名字排序(转换为小写后排序,即:不区分大小写)
print(sorted(stu,key=lambda x:x.lower()))   # 作用同上
print(sorted(stu,key=lambda x:len(x)))      # 按字符串的长度排序
# 参数x接收的是列表的元素,参数x接收的是列表的元素,参数x接收的是列表的元素
lang = [(11,"java"),(101,"go"),(201,"c"),(17,"vb"),(21,"c++")]
print(sorted(lang,key=lambda x:x[0]))  # 按列表中的元组的第一列排序
print(sorted(lang,key=lambda x:x[1]))  # 按列表中的元组的第二列排序

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
[-87, -23, 2, 3, 11, 22, 102]
[2, 3, 11, 22, -23, -87, 102]
['Black', 'Jerry', 'Liugang', 'Mark', 'WANGLIN', 'tom', 'zhangping']
['Black', 'Jerry', 'Liugang', 'Mark', 'tom', 'WANGLIN', 'zhangping']
['Black', 'Jerry', 'Liugang', 'Mark', 'tom', 'WANGLIN', 'zhangping']
['tom', 'Mark', 'Jerry', 'Black', 'Liugang', 'WANGLIN', 'zhangping']
[(11, 'java'), (17, 'vb'), (21, 'c++'), (101, 'go'), (201, 'c')]
[(201, 'c'), (21, 'c++'), (101, 'go'), (11, 'java'), (17, 'vb')]

Ejemplo 2: operación en diccionario

lang = {
    
    11:"java",101:"go",201:"c",17:"vb",21:"c++"}
print(lang)
print(sorted(lang.items(),key=lambda x:x[0]))  # 按字典的 key 排序
print(sorted(lang.items(),key=lambda x:x[1]))  # 按字典的 value 排序

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
{
    
    11: 'java', 101: 'go', 201: 'c', 17: 'vb', 21: 'c++'}
[(11, 'java'), (17, 'vb'), (21, 'c++'), (101, 'go'), (201, 'c')]
[(201, 'c'), (21, 'c++'), (101, 'go'), (11, 'java'), (17, 'vb')]

Supongo que te gusta

Origin blog.csdn.net/weixin_44377973/article/details/132174099
Recomendado
Clasificación