一、什么是lambda表达式
函数是⼀个被命名的、独⽴的完成特定功能的⼀段代码,并可能给调⽤它的程序⼀个返回
值。在python中函数有两种类型,一种是有名函数一种事匿名函数,之前我们已经对有名函数油了一个深入的了解,知道了有名函数就是普通函数,那么匿名函数是其实就是我们的lambda表达式。
二、复习lambda表达式
2.1、lambda表达式的应用场景
如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。
2.2、lambda表达式的语法
基本语法:
# 变量 = lambda 函数参数:表达式((函数代码 + return返回值))
# 调用变量
# 变量()
2.3、lambda表达式的相关应用
2.2.1、无参的lambda表达式
定义一个lambda表达式用来向别人打招呼:
代码:
# 普通函数:
def say_hello():
return "hello"
print("我是普通函数输出的:",say_hello())
# lambda表达式:
lambda_say_hello = lambda: "hello"
print(lambda_say_hello())
# 返回lambda_say_hello()在内存中的地址
print("我是lambda表达式输出的:",lambda_say_hello)
运行结果:
2.2.2、有默认参数的lambda表达式
定义四个lambda表达式用来进行计算两数的四则运算:
代码:
# 定义一个lambda表达式用来返回四则运算的结果:
# 加:
he = lambda num1,num2 = 100:num1 + num2
print("加法的结果为:",he(10))
# 减:
jian = lambda num1,num2,num3 = 100:num3 - num2 - num1
print("减法的结果为:",jian(30,70,))
# 乘:
cheng = lambda num1,num2,num3 = 3: num1 * num2 * num3
print("乘法的结果为:",cheng(1,5,9)) # 如果给默认值参数赋值,那么默认值将会被覆盖
# 除:
chu = lambda num1,num2,num3 = 2: num1 / num2 / num3
print("除法的结果为:",chu(100,5))
运行结果:
2.2.3、可变参数*args的lambda表达式
定义一个可变参数*args(元组类型)的lambda表达式计算返回元组的最后一个元素:
代码:
last_num = lambda *nums: nums[-1]
print("最后一个元素是:",last_num(1,1,465,49865,456,456,456,5465,6,56))
运行结果:
2.2.4、带关键字的可变参数**kwargs的lambda表达式
定义一个可变关键字参数*kwargs(元组类型)的lambda表达式返回字典里面的所有的值:
代码:
my_dict = lambda **dict: dict.items()
print(my_dict(name = "Tom",age = 23,sex ="man"))
运行结果:
2.2.5、带三元运算的的lambda表达式
1、什么是三元运算符:
三元运算符的语法:
语句1 if 判断条件 else 语句2
2、三元运算符案例:返回两数字的最大值:
代码:
num1 = int(input("请输入比较的第一个数字:"))
num2 = int(input("请输入比较的第二个数字:"))
max = num1 if num1 > num2 else num2
print("最大值为:",max)
运行结果:
3、带三元运算的的lambda表达式案例:返回两数字的最大值:
代码:
max = lambda num1,num2: num1 if num1 < num2 else num2
print("使用lambda表达式和三元运算符计算最大值的结果为:",max(12,324))
运行结果:
三、lambda表达式(列表数据+字典数据排序)的案例
3.1、列表元素为字典的情况
3.1 1、按照字典中的某个键对应的值进行排序
3.1.2.、按照多个键对应的值依次排序
案例:
student = [
{"name":"peter","age":20},
{"name":"tom","age":22},
{"name":"tnny","age":21}
]
# sort():排序后改变的是原来的列表,sorted():排序后创建了一个新的列表
# 1、使用sort()函数排序:
student.sort(key = lambda x: x["name"])
print("根据名字进行升序排序:",student)
student.sort(key = lambda x: x["age"], reverse = True)
print("根据年龄进行降序排序:",student)
# 按照多个键对应的值依次排序(先比较名字,名字如果首字母相同再比较年龄)
student.sort(key=lambda x:(x["name"],x["age"]))
print("按照多个键对应的值依次排序",student)
print("-"*120)
# 2、使用sorted()函数排序:
sorted_stu = sorted(student,key=lambda x:x["name"])
print("根据名字进行升序排序:",sorted_stu)
sorted_stu1 = sorted(student,key=lambda x:x["age"])
print("根据名字进行升序排序:",sorted_stu1)
sorted_stu2 = sorted(student,key = lambda x:(x["age"],x["name"]),reverse = True)
print("按照多个键进行降序排序:",sorted_stu2)
3.2、列表和字典混合情况
3.2.1、按照字典中列表元素的某个特征进行排序
3.2.2、按照列表长度等其他条件排序
my_data = {
'group1': [10, 5],
'group2': [3, 7, 2,23],
'group3': [12, 1, 9]
}
# 按照字典中列表元素的某个特征进行排序
sorted_data = sorted(my_data.items(), key=lambda item: item[-1], reverse=True)
print("根据group的序号降序排序:",sorted_data)
# 按照列表长度等其他条件排序
sorted_data1 = sorted(my_data.values(), key=lambda x: len(x), reverse=True)
print("根据列表的长度排序:",sorted_data1)