匿名函数
- 匿名:
隐藏名字,即没有名称 - 匿名函数:
没有名字的函数
Lambda 表达式
- python中使用Lambda表达式构建匿名函数
lambda x : x ** 2# 定义
(lambda x : x**2)(4)#调用 #注意括号
- 使用lambda关键字定义函数,格式为lambda[参数列表]:表达式
- 参数列表不需要小括号.无参就不写参数
- 冒号用来分割参数列表和表达式部分
- 不需要使用return,表达式的值,就是匿名函数的返回值,表达式中不能出现等号
- lambda表达式(匿名函数)只能写在一行上,也成单行函数
匿名函数往往用在高阶函数传参时,使用lamabda表达式,往往能简化代码
#返回常量的函数
print((lambda :0)())
# 加法匿名函数 带缺省值
print((lambda x,y=3 : x + y)(5))
print((lambda x=3,y=4 : x + y)(5,6))
###
[i for i in (lambda *args: map(lambda x : (x+1, args), args))(*range(5))]
##
- *args是外层lambda的形参,其传的实参是(*range(5))
- 外层lambda的函数体返回值就是 map函数的返回值.
- 把可变位置参数*args收集的(0,1,2,3,4)带入到map函数中
- map函数的执行函数体内层lambda,传的参数是0,1,2,3,4
- 内层lambda函数中把args,01234依次传实参给x 执行函数体(x+1,args)
- 依次为(0+1,(0,1,2,3,4)),(1+1,(0,1,2,3,4))…返回5个元素
- 外层列表解析式,生成含有这5项的列表
-
生成的列表 [(1, (0, 1, 2, 3, 4)), (2, (0, 1, 2, 3, 4)), (3, (0, 1, 2, 3, 4)), (4, (0, 1, 2, 3, 4)), (5, (0, 1, 2, 3, 4))]
-
map 把args里的每一项都拿出来在执行函数里的操作