Lambda 函数
Lambda函数是一种匿名函数,也就是说,它没有使用def关键字定义的函数名。Lambda函数通常用于简短的、一次性的任务,比如作为参数传递给高阶函数(例如filter()、map()等)。
lambda arguments: expression
这里,arguments是传递给lambda函数的参数列表,expression是一个关于这些参数的表达式,它返回的值就是这个lambda函数的返回值。
Lambda 函数可以接受任意数量的参数,但只能有一个表达式。这个表达式的计算结果就是函数的返回值。
例如,一个简单的lambda函数,它接受一个参数并返回它的平方:
square = lambda x: x * x
print(square(5)) # 输出 25
好,以上我们了解了Lambda函数的基本使用方法,接下来分享一些操作技巧,供大家学习参考。
1、与sorted()结合使用进行自定义排序
students = [{'name': 'John', 'age': 20}, {'name': 'Jane', 'age': 22}]
def sort_key(student):
return student['age']
sorted_students = sorted(students, key=sort_key)
print(sorted_students)
在这个例子中,我们定义了一个名为sort_key的函数,它接受一个学生字典作为参数,并返回学生的年龄。然后我们将这个函数传递给sorted()函数的key参数,以便按照年龄对学生列表进行排序。
像这种简单的排序,我们可以使用lambda函数:
students = [{'name': 'John', 'age': 20}, {'name': 'Jane', 'age': 22}]
sorted_students = sorted(students, key=lambda x: x['age'])
2、与filter()结合使用进行元素筛选
numbers = range(10)
def is_even(number):
return number % 2 == 0
even_numbers = list(filter(is_even, numbers))
print(even_numbers)
在这个例子中,我们定义了一个名为 is_even 的函数,它接受一个数字作为参数,并返回一个布尔值,指示该数字是否为偶数。然后我们将这个函数传递给 filter() 函数,以便筛选出范围内的所有偶数。
使用lambda函数:
numbers = range(10)
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3、在高阶函数中作为参数传递
from functools import reduce
numbers = [1, 2, 3, 4, 5]
sum_of_squares = reduce(lambda x, y: x + y * y, numbers, 0)
考虑到这部分内容,可能部分粉丝没有涉猎过相关内容,所以这里解释一下:
(1)functools是Python的标准库中的一个模块,它提供了用于高阶函数(即那些作用于或返回其他函数的函数)的实用工具。reduce函数是其中之一。
(2)sum_of_squares = reduce(lambda x, y: x + y * y, numbers, 0):这行代码使用reduce函数来计算列表numbers中每个元素的平方和。
lambda x, y: x + y * y:它接受两个参数x和y。这个lambda函数的目的是将当前累积的和x与下一个元素的平方y * y相加,然后返回新的累积和。
numbers:这是reduce函数作用的列表。
0:这是reduce函数的初始值。在第一次调用lambda函数时,x将被设置为此初始值,而y将是列表中的第一个元素。
(3)reduce函数的工作方式是遍历列表numbers中的所有元素,每次迭代都应用lambda函数。在第一次迭代中,x是初始值0,y是列表中的第一个元素1。lambda函数计算0 + 1 * 1,结果是1。在第二次迭代中,x是上一次迭代的结果1,y是列表中的第二个元素2。lambda函数计算1 + 2 * 2,结果是5,依此类推。最终,reduce函数返回所有元素平方的和。
因此,sum_of_squares将是1^2 + 2^2 + 3^2 + 4^2 + 5^2的结果,即55。
4、在数据处理或机器学习中的应用
df['new_column'] = df.apply(lambda row: row['col1'] + row['col2'], axis=1)
这行代码的作用是在 DataFrame df 中创建一个新的列 new_column,这个新列的每个元素是同一行的 col1 和 col2 列的和。这个操作是对 DataFrame 中的每一行独立进行的,因此 new_column 中的每个值都是对应行的 col1 和 col2 的和。
就我们举的例子而言,其实这里完全可以更简单化:
df['new_column'] = df['col1'] + df['col2']
没错,就这个例子而言,使用下面的代码运行速度会更快。
在大多数情况下,应该优先使用向量化的操作,因为它们更快。只有当需要执行复杂的操作,且这些操作不能简单地用向量化的方式完成时,才应该考虑使用apply()方法。
尽管lambda函数在这些高级用法中很有用,但需要注意的是,对于复杂的逻辑,使用普通的函数定义可能更为清晰和可维护。Lambda函数最适合用于简短且目的明确的代码片段。
版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1
技术支持: 易动力网络