一、普通函数与匿名函数
在Python中,函数是⼀个被命名的、独⽴的完成特定功能的⼀段代码,并可能给调⽤它的程序⼀个返回 值。
所以在Python中,函数⼤多数是有名函数 => 普通函数。但是有些情况下,我们为了简化程序代码,也 可以定义匿名函数 => lambda表达式
二、lambda表达式应⽤场景
如果⼀个函数有⼀个返回值,并且只有⼀句代码(当一个函数仅需返回单行表达式且无需命名时)可以使⽤ lambda简化。(也可以使用推导式来编写,符合要求)
lambda表达式:
返回值,可以对其进行操作完之后再返回
操作的逻辑代码可以用 推导式 、三目运算符来进行操作
三、lambda表达式基本语法
变量 = lambda 函数参数:表达式(函数代码 + return返回值)
#调⽤变量
变量()
四、编写lambda表达式
# 最简单的形式,不带参数,直接返回
# 定义普通函数,返回固定值666
def f1():
return 666
print(f1()) # 输出函数调用结果:666
# 用lambda表达式定义相同功能的匿名函数
la_res = lambda: 666 # lambda无参数,直接返回666
# 注意lambda表达式本身是函数对象,直接打印会显示内存地址
print(la_res) # 输出:<function <lambda> at 0x...>
# 调用lambda函数时需要加括号(),才会执行并返回结果
print(la_res()) # 输出:666
# lambda语法结构:lambda 参数列表: 表达式(自动返回表达式结果)
# 适用场景:简单逻辑的匿名函数,替代单行return的简单函数
五、编写带参数的lambda表达式
带固定个数参数的函数形式
# 带固定个数参数的函数形式,直接返回
def f2(num1,num2):
print(num1+num2)
return num1 + num2
# lamda表达式简写为
la_res2 = lambda num1,num2:num1 +num2
run_res = la_res2(10,20)
print(run_res)
六、lambda表达式相关应⽤
1、带含有默认参数的lamda表达式
# 带含有默认参数的lamda表达式
test1 = lambda a, b, c=200: a + b + c
print(test1(100,200))
2、不定⻓参数:可变参数*args
# # 使用lambda函数计算平方
# squared = map(lambda x: x * x, [1, 2, 3, 4, 5])
# print(list(squared)) # 输出: [1, 4, 9, 16, 25]
3、不定⻓参数:可变参数**kwargs
当参数是字典类型的数据时,什么时候用key:value,什么时候用key = value
# 带字典类型的不定长参数形式(**)
test3 = lambda **kwargs:kwargs
# 可以使用等于号的方式
print(test3(aa=123,bb=234,cc=456))# 此时的key不需要打双引号 key = value
# 也可以使用{}大括号的方式
print(test3(**{'aa': 123, 'bb': 234, 'cc': 456}))# 此时key需要有双引号,同时格式是key:value
4、带if判断(三⽬运算符)的lambda表达式
test4 = lambda num1,num2:True if num1*num2>200 else False
print(test4(10,20))
5、列表数据+字典数据排序(重点)
知识点:列表.sort(key=排序的key索引, reverse=True)
使用sort方法进行排序
students = [
{'name': 'Tom', 'age': 20},
{'name': 'Rose', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按name值升序排列
students.sort(key=lambda x: x['name']) # Jack/Rose/Tom
print(students)
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)
其他办法:
使用sorted函数也可以实现
students = [
{'name': 'Tom', 'age': 20},
{'name': 'Rose', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按年龄排序
sorted_students = sorted(students, key=lambda student: student["age"])
print(sorted_students)
需要注意的时区分sort与sorted函数