匿名函数,就是我们需要一个函数,但是没有必要给它起一个名字,因为这个名字无关紧要,而且有时影响效率。
在Python中,def
关键字是用来定义常规函数的,而lambda
关键字则是用来创建匿名函数的。
那么我们常说的lambda
表达式应该怎么写呢?
我们又可以用lambda
表达式干什么事情呢?
Concept
Lambda
表达式语法如下:
lambda arguments: expression
这个函数可以有任意数量的参数arguments
,但是只有一个表达式expression
,函数计算并返回这个表达式的值。
我们可以比较随意地使用lambda
表达式,但是要牢记一点,就是它被严格限制只能有单一的表达式。
Difference between def
and lambda
为了理解def
定义的普通函数与lambda
函数的区别,我们举个例子。
小目标:求给定数的三次方。
Implementation:
def cube(y):
return y*y*y;
g = lambda x: x*x*x
print(g(7))
print(cube(5))
Output:
343
125
使用def
:首先,我们需要定一个名为cube
的函数,并传递值给它。运算执行完后,我们还需要调用return
返回计算结果给调用函数的地方。
使用Lambda
:Lambda
表达式不需要 return
语句,它只包含一个表达式,计算并返回。 理论上,在可以用函数的地方我们都可以用lambda
。
Uses of Lambda
实际上,Python
中Lambda
表达式的强大之处在于它可以和很多内置函数一起用。比如filter()
,map()
,reduce()
。
lambda + filter
filter()
函数的参数为一个function
和一个list
。提供了一种优雅的筛选元素的方法。通过传递列表中的每个元素到function
中,判断是否满足条件,满足则返回True
。例如:
nums = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
odd = list(filter(lambda x: (x%2 != 0) , nums))
print(odd)
# [5, 7, 97, 77, 23, 73, 61]
lambda + map
map()
函数的参数为一个function
和一个list
。通过function
映射list
中的每个元素,达到改变其值的目的。返回一个元素统一修改后的列表。例如:
nums = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
double = list(map(lambda x: x*2, nums))
print(double)
# [10, 14, 44, 194, 108, 124, 154, 46, 146, 122]
lambda + reduce
reduce()
函数的参数为一个function
和一个list
。这是通过调用lambda
函数,反复操作list
里面的数对。reduce()
是functools
模块中的一个。
from functools import reduce
nums = [5, 8, 10, 20, 50, 100]
sum = reduce((lambda x, y: x + y), nums)
print (sum)
# 193
这里前两个元素相加的结果会累加到下一个元素,如此迭代直到列表末尾。它执行起来类似这样(((((5+8)+10)+20)+50)+100)
。
Practice
给一个list[1,2,3,2,2,2,5,4,2]
,我们已经遍历一边统计了每个数字出现的次数,得到一个dictcout = {1: 1, 2: 5, 3: 1, 5: 1, 4: 1}
,现在我们想要里面出现次数最多那个数字。
A: Look Here->1 ~