匿名函数,就是我们需要一个函数,但是没有必要给它起一个名字,因为这个名字无关紧要,而且有时影响效率。
在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 ~