如果你需要把一个多行的函数逻辑,压缩成一行清晰的表达,让代码瞬间“瘦身”并直接出现在它被使用的地方,你觉得这可能吗?lambda表达式就像这样一个“代码压缩魔法”。
在Python中,函数通常被定义为一个具有名称的、可重复使用的代码单元,用于执行特定任务,并可以选择性地返回一个结果。这类函数被称为“有名函数”或“普通函数”。
然而,为了在特定场景下(例如代码逻辑非常简单且无需重复使用)使程序更加简洁,Python也支持一种没有名称的函数定义方式,即“匿名函数”,通常使用 lambda表达式来创建。
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。
变量 = lambda 函数参数:表达式(函数代码 + return返回值)# 调用变量变量()
定义一个函数,经过一系列操作,最终返回100。
def fn1(): return 100# 调用函数print(fn1) # 返回fn1函数在内存中的地址print(fn1()) # 代表找到fn1函数的地址并立即执行
lambda表达式进行简化:
fn2 = lambda : 100print(fn2) # 返回fn2在内存中的地址print(fn2())
编写一个函数求两个数的和
def fn1(num1, num2):return num1 + num2print(fn1(10, 20))
lambda表达式进行简化:
fn1 = lambda num1, num2:num1 + num2print(fn1(10, 20))
fn = lambda a, b, c=100 : a + b + cprint(fn(10, 20))print(fn(10, 20, 30))
fn1 = lambda *args : argsprint(fn1(10, 20, 30))
fn2 = lambda **kwargs : kwargsprint(fn2(name='Tom',age=20, address='北京市海定区'))
fn = lambdaa, b : aifa > belsebprint(fn(10, 20))
知识点:列表.sort(key=排序的key索引, reverse=True)
students = [ {'name': 'Tom', 'age': 20}, {'name': 'Rose', 'age': 19}, {'name': 'Jack', 'age': 22}]# 按name值升序排列students.sort(key=lambda x:x['name'])print(students)# 按name值降序排列students.sort(key=lambda x:x['name'], reverse=True)print(students)# 按age值升序排列students.sort(key=lambda x:x['age'])print(students)
今日学习完毕,课后作业:
给定一个整数列表 numbers和一个字符串列表 students,请使用 lambda 表达式 完成以下任务:
numbers = [1, 5, -2, 10, -8, 7]students = ["Alice", "Bob", "Charlie", "David"]
(1)过滤负数:使用 filter()函数和 lambda 表达式,从 numbers中筛选出所有非负数(大于等于0的数)。
(2)计算平方:使用 map()函数和 lambda 表达式,计算 numbers中每个元素的平方,生成新列表。
(3)按名字长度排序:使用 sorted()函数和 lambda 表达式,将 students列表按照名字字符串的长度进行升序排序。
(4)找最长名字:使用 max()函数和 lambda 表达式,找出 students列表中名字最长的学生。