Python 中的匿名函数的关键字是 lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式。我们通过几个例子看一下它的用法:
>>> sqr = lambda x: x**2
>>> sqr(3) # 9
对应的常规 def 函数这样定义:
>>> def sqr(x):
return x**2
>>> sqr(3) # 9
可以看到,匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object)。
Python 主要提供了这么几个函数:sorted()、map()、filter() 和 reduce(),它们通常结合匿名函数 lambda 一起使用。
-
因为
lambda表达式可以用在列表推导式中:>>> [(lambda x: x*x)(x) for x in range(10)] >>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] -
lambda作为sorted()函数的参数>>> s = [('w', 1), ('a', 3), ('c', 6)] >>> s.sort(key=lambda x: x[1]) # 按列表中元组的第二个元素排序 >>> print(s) >>> [('w', 1), ('a', 3), ('c', 6)] >>> s_ = sorted(s, key=lambda x: x[0]) # 按列表中元组的第一个元素排序。sorted()不会改变 s本身 >>> print(s_) >>> [('a', 3), ('c', 6), ('w', 1)] -
lambda作为map()函数的参数map(function, iterable)函数表示,对 iterable 中的每个元素,都运用 function 这个函数,最后返回一个迭代器可供遍历。比如刚才列表的例子,要对列表中的每个元素乘以 2,那么用map就可以表示为下面这样:>>> s = [1, 2, 3, 4, 5] >>> list(map(lambda x: x**2, s)) # map()返回的是一个可迭代对象 >>> [1, 4, 9, 16, 25] -
lambda作为filter()函数的参数filter(function, iterable)函数和map函数类似,function同样表示一个函数对象。filter()函数表示对iterable中的每个元素,都使用function判断,并返回True或者False,最后将返回True的元素组成一个迭代器可供遍历。举个例子,比如我要返回一个列表中的所有偶数,可以写成下面这样:
>>> s = [1, 2, 3, 4, 5] >>> list(filter(lambda x: x % 2 == 0, s)) >>> [2, 4] -
lambda可以作为reduce()函数的参数reduce(function, iterable)函数通常用来对一个集合做一些累积操作。function同样是一个函数对象,默认接收两个参数,表示对iterable中的每个元素以及上一次调用后的结果运用function进行计算,所以最后返回的是一个单独的数值。举个例子,我想要计算某个列表元素的乘积,就可以用
reduce()函数来表示:>>> from functools import reduce # python3 之后 reduce 函数放在了这 >>> s = [1, 2, 3, 4, 5] >>> reduce(lambda x, y: x * y, l) # 1*2*3*4*5 = 120 >>> 120当然,
filter()和reduce()的功能,也可以用 for 循环或者列表推导式来实现。通常来说,在我们想对集合中的元素进行一些操作时,如果操作非常简单,比如相加、累积这种,那么我们优先考虑
map()、filter()、reduce()这类或者列表推导式的形式。
Python 中的匿名函数 lambda,它的主要用途是减少代码的复杂度。需要注意的是 lambda 是一个表达式,并不是一个语句;它只能写成一行的表达形式,语法上并不支持多行。匿名函数通常的使用场景是:程序中需要使用一个函数完成一个简单的功能,并且该函数只调用一次。
map()、filter() 和 reduce() 三个函数比其他形式(for 循环,列表推导式)的性能,效率是更优的。
本文介绍了Python中的匿名函数lambda的基本语法及其应用场景,包括与sorted()、map()、filter()和reduce()等内置函数的结合使用。并通过实例展示了如何利用lambda简化代码。
1408

被折叠的 条评论
为什么被折叠?



