Python 匿名函数:lambda 表达式使用详解
Python 中的 lambda 表达式是一个小型的匿名函数。与正常函数一样,Lambda 函数可以使用参数及语句,并且可以返回值。它们不需要使用 def 关键字来定义函数名称。相反,它们以关键字 lambda 开始,后面是参数列表和冒号(:),最后是表达式。
Lambda 表达式常用于简化代码,特别是作为函数参数传递。以下是 lambda 表达式的语法:
lambda arguments: expression
其中,arguments 是参数列表,expression 是执行的表达式。下面就让我们详细了解一下 lambda 表达式的使用方法。
1. 匿名函数
Lambda 表达式创建的是匿名函数。匿名函数指的是没有名字的函数,它们不必与现有的函数进行绑定。这意味着,你可以在某些地方需要一个函数对象时直接使用它。
例如,下面的代码展示了如何使用 lambda 表达式定义一个简单的函数:
f = lambda x: x**2
print(f(3)) # 输出 9
这个 lambda 表达式定义了一个函数,它接受一个参数 x 并返回 x 的平方。而 f 实际上就是这个函数,可以使用它来计算 3 的平方。
2. 简单的 lambda 函数
Lambda 表达式可以接受任意数量的参数,但只能返回一个表达式的结果。下面是一个定义了两个参数并返回它们的和的简单 lambda 表达式:
sum = lambda x, y: x + y
print(sum(2, 3)) # 输出 5
在这个例子中,lambda 表达式定义了一个函数 sum ,它接受两个参数 x 和 y 并返回它们的和。
3. Lambda 表达式作为函数参数
在 Python 中,lambda 表达式通常用作函数的参数。这个特性可以帮助我们简化代码。
例如,Python 内置的 sorted 函数可以接受一个可迭代对象,并针对每个元素进行排序。可以使用 lambda 表达式自定义排序规则。下面的代码演示了如何使用 lambda 表达式来按照字符串长度进行排序:
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # 输出 ["date", "apple", "cherry", "banana"]
sorted 函数是一个非常常用的函数,使用 lambda 表达式可以让代码更简洁、易读。
4. Lambda 表达式与 filter() 函数
Python 内置的 filter() 函数可以使用 lambda 表达式来过滤一个可迭代对象中符合特定条件的元素。下面的代码演示了如何使用 lambda 表达式筛选出一个列表中的偶数元素:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出 [2, 4, 6]
在这个例子中,filter() 函数接受两个参数。 个参数是一个函数,用于评估每个元素是否符合条件。第二个参数是要过滤的可迭代对象。在这个例子中,我们使用 lambda 表达式作为 个参数来检查一个数是否为偶数。
5. Lambda 表达式与 map() 函数
除了过滤元素,map() 函数也可以通过应用一个 lambda 表达式到列表中的每个元素来变换列表。下面的代码演示了如何使用一个 lambda 表达式将一个列表中的每个数加倍:
numbers = [1, 2, 3, 4, 5]
doubles = list(map(lambda x: x * 2, numbers))
print(doubles) # 输出 [2, 4, 6, 8, 10]
在这个例子中,map() 函数接受两个参数, 个参数是一个函数,用于把每个元素变换为另一个值。第二个参数是要变换的可迭代对象。在这个例子中,我们使用 lambda 表达式来把每个元素乘以 2。
总结
Lambda 表达式是一个小型的匿名函数,它可以接收任意数量的参数并返回单个表达式的结果。它通常用于过滤、映射和排序,以及在需要函数对象的位置上。
如果你还不熟悉 Python 中的 lambda 表达式,在上面的示例代码中跟着练习几次,相信会很快掌握这种简洁、实用的语法。
