一、匿名函数基础
匿名函数的格式如下:lambda argument1,argument2,…,argumentN:expression,可以看出匿名函数的关键字是lambda;
square = lambda x: x**2
square(3)
输出:9
1、lambda是一个表达式(expression),而不是一个语句(statement);
- 表达式:就是用一系列的公式去表达一个东西,比如x+2、x**2等;
- 语句:是完成了某些功能,例如赋值语句、打印语句
使用场景:
- 可以用在列表内部,而常规函数却不能
result=[(lambda x:x**2)(x)for x in range(10)]
print(result)
输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- lambda可以被用作某些函数的参数,而常规函数却不能
l = [(1, 20), (3, 0), (9, 10), (2, -1)]
l.sort(key=lambda x: x[1]) # 按列表中元祖的第二个元素排序
print(l)
# 输出
[(2, -1), (3, 0), (9, 10), (1, 20)]
2、lambda的主体是只有一行简单表达式,并不能扩展成一个多行的代码块。
lambda和函数发挥其不同的作用,lambda专注于简单的任务,而常规函数则负责更复杂的多行逻辑。
二、为什么要使用匿名函数?
python中用匿名函数的地方都可以等价成其他表达式,也可以不使用匿名函数,但优点是可以简化代码的复杂度,模块化代码。
python主要提供了这么几个函数:map()、filter()和reduce(),通常结合匿名函数lambda一起使用;
- Map(function,iterable)函数,它表示对iterable中每个元素,都运用function这个函数,最后返回一个新的可遍历的集合。
l = [1, 2, 3, 4, 5]
new_list = map(lambda x: x * 2, l) # [2, 4, 6, 8, 10]
- Filter(function,iterable)函数,和map类似,fileter()函数表示对iterable中的每个元素,都是用function判断,并返回true或false。最后将返回True的元素组成一个新的可遍历的集合。
l = [1, 2, 3, 4, 5]
new_list = filter(lambda x: x % 2 == 0, l) # [2, 4]
- Reduce(function,iterable)函数,通常用来对一个集合坐一些累计操作。function是一个函数对象,规定它有两个参数,表示对iterable中的每个元素以及上一次调用的结果,运用function进行计算,所以最后返回的是一个单独的数值。
l = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, l) # 1*2*3*4*5 = 120
思考题:如果让你对一个字典d = {'mike': 10, 'lucy': 2, 'ben': 30},根据值进行由高到底的排序?
程序:
d={'mike':10,'lucy':2,'ben':30}
print(d.items())
result=sorted(d.items(),key=lambda x:x[1],reverse=True)
print(result)
输出:
dict_items([('mike', 10), ('lucy', 2), ('ben', 30)])
[('ben', 30), ('mike', 10), ('lucy', 2)]
备注:sorted(d.items(),key=lambda x:x[1],reverse=True),d.items()为待排序的对象,key=lambda x:x[1]表示对前边的对象的第二维数据的值进行排序,reverse为排序规则,reverse=True为降序,reverse=false为升序;