什么是 Lambda 函式?
Lambda 函式,也称为匿名函式,是一种在单行内定义的小函式。它不需要像一般函式一样使用 def 关键字来定义函式名称,而是直接使用 lambda 关键字来表示Lambda 函式的语法非常简洁,通常用于一些简单的运算或作为其他函式的参数。
Lambda 函式的语法
lambda arguments: expression
- lambda:关键字,表示定义一个匿名函式。
- arguments:函式的参数,可以有多个,用逗号分隔。
- expression:函式的运算表达式,也就是函式的返回值。
Lambda 函式的例子
# 传统函式写法
def square(x):
return x * x
# Lambda 函式写法
square = lambda x: x * x
# 两者效果相同,都可以计算一个数的平方
print(square(5)) # 输出 25
Lambda 函式的常见用法
作为其他函式的参数:- map()函式:将函式应用于可迭代对象的每个元素。- filter() 函式:过滤可迭代对象中的元素。- reduce() 函式:将函式应用于可迭代对象的元素,从左到右累积结果。- sorted(arguments**,**key=lambda x: expression) 函式:用于排序可迭代对象。
map:将函式应用到序列的每个元素上。
map(function, iterable)function: 要应用于每个元素的函式。iterable: 可迭代对象,也就是要进行操作的数据集合。
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x*x, numbers))
print(squared) # 输出 [1, 4, 9, 16]
filter:过滤序列中的元素
filter(function, iterable)function: 这个函式会返回一个布林值,表示元素是否符合条件。iterable: 要进行筛选的可迭代对象。
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出 [2, 4]
sorted:对可迭代对象进行排序。
sorted(iterable, key=None, reverse=False)
fruits = [\'banana\', \'apple\', \'orange\']
sorted_fruits = sorted(fruits, key=lambda x: x[-1])
print(sorted_fruits) # 输出 [\'banana\', \'orange\', \'apple\']
最终的排序结果是按照水果名称的最后一个字母的字母序x[-1]进行排序的。
- iterable: 要排序的可迭代物件。
- key: 一个自订的函式,用来指定排序的依据。这个函式会对每个元素进行操作,并传回一个值,排序就是根据传回的值进行的。
- reverse: 一个布林值,指定排序顺序。 True 表示降序,False 表示升序(预设)。
关于 map、filter 和 sorted 中 iterable 的位置
不晓得你有没有发现,在map、filter 和 sorted 中 iterable 的位置有点不同?
-
map 与 filter:map(function, iterable)iterable(要操作的序列)总是放在 function(要套用的函式)的后面。这是因为 map 和 filter 的主要目的是对序列中的每个元素应用一个函式,所以序列本身就是操作的物件。r
-
sorted:sorted(iterable, key=None, reverse=False)iterable 放在 key(排序的依据)的前面。这是因为 sorted 的主要目的是对序列iterable进行排序,而 key 是一个可选参数,用于指定排序的依据。
Lambda 函式的优缺点
- 优点:
- 简洁: 对于简单的运算,Lambda 函式可以写得非常简洁。
- 灵活: 可以作为参数传递给其他函式,提高程式码的可读性。
- 缺点:
- 可读性: 过于复杂的 Lambda 表达式可能降低程式码的可读性。
- 单行限制: Lambda 函式通常只能写一行,对于复杂的逻辑不太适合。
何时使用 Lambda 函式?
简单的运算: 对于一些简单的运算,如平方、求绝对值等,Lambda 函式非常适合。作为回调函式: 在使用一些库函式时,需要传入一个函式作为参数,Lambda 函式可以简化写法。与高阶函式结合: map、filter、sorted 等高阶函式与 Lambda 函式配合使用,可以写出非常简洁的程式码。
总结
Lambda 函式作为 Python 的一个重要特性,可以让程式码更加简洁和灵活。但过度使用 Lambda 函式也可能降低程式