第十一章 - Python 匿名函数
匿名函数
- 匿名函数,即没有名字的函数
- 没有名字如何定义
- 没有名字如何调用
- 如果能调用,如何使用
匿名函数
- Python 借助 Lambda 表达式构建匿名函数
- 格式
- lambda 参数列表 : 表达式
lambda x : x 2
(lambda x : x 2)(4) # 调用
foo = lambda x, y : (x + y) 2 # 不推荐这么用,因为用lambda就是为了匿名使用
foo(2, 1)
def foo(x,y): # 建议使用普通函数
return (x + y) 2
foo(2, 1)
- lambda 参数列表 : 表达式
匿名函数
- 使用 lambda 关键字来定义匿名函数
- 参数列表不需要小括号
- 冒号是用来分割参数列表和表达式的
- 不需要使用 return,表达式的值,就是匿名函数返回值
- lambda 表达式(匿名函数)只能写在一行上,被称为单行函数
- 用途
- 在高阶函数传参时,使用 lambda 表达式,往往能简化代码
匿名函数
- print((lambda :0)())
- print((lambda x, y=3: x + y)(5))
- print((lambda x, y=3: x + y)(5, 6))
- print((lambda x, *, y=30: x + y)(5))
- print((lambda x, *, y=30: x + y)(5, y=10))
- print((lambda *args: (x for x in args))(*range(5)))
- *args是可变位置参数组成一个元组 表达式是生成器表达式是惰性求值的 最后是实参解构
- print((lambda *args: [x+1 for x in args])(*range(5)))
- 表达式是列表解析式
- print((lambda *args: {x+2 for x in args})(*range(5)))
- 集合解析式
- [x for x in (lambda *args: map(lambda x: x+1, args))(*range(5))] # 高阶函数
- 是一个大的列表解析式
- [x for x in (lambda *args: map(lambda x: (x+1,args), args))(*range(5))] # map中的lambda中的表达式是在凑个元组