定义
lambda表达式,也称为匿名函数,是Python中一种快速定义简洁的函数的方法。lambda表达式可以在一行代码中定义函数,并且功能简单,适合用于函数式编程。
语法如下:
lambda 参数列表: 函数体
其中,参数列表可以是一个或多个参数,而函数体可以是一个简单的表达式或语句块,函数体的返回值就是lambda函数的返回值。
优点
- 简短:将多行代码的函数缩减成了一行代码,从而使代码更加简洁、易读。
- 灵活:可以在任何需要函数的地方使用,而且不需要在代码中定义函数名,从而可以节省代码量。
- 方便:使编程更加方便,能够提高代码的效率和质量。
应用场景
- 对列表或字典等集合进行排序,比如对一个列表按照元素的某个属性进行排序。
- 过滤数据,比如从一个列表中筛选出符合条件的元素。
- 把其他函数作为参数传递给其他函数,比如把列表中的元素作为参数传递给其他函数做进一步处理。
- 以及其他需要定义一个简单函数调用的场合。
示例
# 示例 1:定义一个简单的lambda表达式
greet = lambda name: f'Hello, {name}!'
print(greet('marco')) #输出:Hello, marco!
# 示例 2:将lambda表达式作为其他函数的参数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
odd_numbers = list(filter(lambda x: x % 2 != 0, numbers))
print(odd_numbers) #输出:[1, 3, 5, 7, 9]
# 示例 3:对列表中的元素按照元素值排序
fruits = ['apple', 'banana', 'pear', 'orange', 'grape']
sorted_fruits = sorted(fruits, key=lambda fruit: fruit.lower())
print(sorted_fruits) #输出:['apple', 'banana', 'grape', 'orange', 'pear']
-
在示例1中,我们定义了一个将字符串拼接成问候语的lambda表达式。这个表达式只有一个参数,当我们调用它的时候,会将传递给它的参数插入到问候语中间。
-
在示例2中,我们使用了一个lambda表达式做为
filter()
函数的参数,用来筛选出列表中的奇数。Lambda表达式在这里表示一个简单的条件,只有元素能够满足该条件才会被保留下来。 -
在示例3中,我们使用了一个lambda表达式做为
sorted()
函数的参数,用来决定列表元素的排序次序。lambda表达式在这里表示对于每个元素,我们都会取它的小写版本作为排序的依据。
与普通函数的区别
虽然lambda表达式与普通函数在功能上很相似,但它们还是存在几个区别:
- 规则不同:lambda表达式和普通函数的定义方式和参数规则有所不同。
- 语意不同:lambda表达式的语义并不一样。lambda表达式的调用结果就是函数的返回值,而且它仅能使用单个表达式,而不是一组Python语句。
- 可读性不同:lambda表达式的语义没有普通函数容易理解,不易于代码维护。