lambda表达式可以返回一个匿名函数,在python中,任何函数都可以像可以像普通的数字、字符串、列表数据类型一样赋值给一个变量,所以函数也可以作为另一个函数的参数使用,称为高阶函数。
函数的对象特性
函数其实是一个对象,所以我们可以把一个函数赋值一个变量
# 普通函数
def myfun():
print("hello python-xp.com")
# 可以将普通函数赋值给一个变量
# 通过该变量来调用函数
fun = myfun
fun()
# fun 与 myfun实际上指向同一个函数对象
print(id(myfun))
print(id(fun))
在上面的代码中,fun
与myfun
是同一个函数,也就是两个标识符都指向同一个函数对象
匿名函数lambda表达式
函数名其实就是函数对象的一个标识名,如果定义完一个函数立即使用,可以不用函数名,这就是匿名函数
lambda语句结构
# lambda 参数列表 : 运算表达式
# 匿名函数示例
myfun = lambda x,y : x + y
# 上面的定义函数与下面的定义函数等效
# def myfun(x,y):
# return x+y
#lambda
表达式是函数定义方法的一种简写,lambda与冒号:之间是形参,冒号后面是表达式
lambda表达式注意事项
1. 不能包含多条语句,只能包含一条表达式
2. 可以包含条件表达式、推导式、生成式等表达式
lambda x, y: x+y if x > y else x-y # 如果x大于y就返回和,否则返回差
3. 不能包含if...else,for, while这些语句结构
错误使用 lambda x,y: if x > y: x+y
# 正确
myfun = lambda x, y: x + y if x < y else x - y
myfun(1, 3)
myfun(3, 1)
# 错误
myfun = lambda x, y: if x < y: x + y
# 使用推导式
# 参数1: 任意整数
# 参数2: 任意一个整数列表
# 输出参数2列表中所有能被参数1整除的成员
myfun = lambda x, y: [i for i in y if i%x==0]
myfun(3, [1,2,3,4,5,6,7,8,9])
匿名函数使用场合
匿名函数通常用于高阶函数编程中,即作为另一个函数的变量
# 高阶函数可以让编程获得很大的灵活性
# 传入不同的func, do可以执行不同的逻辑
def do(func, x, y):
return func(x, y)
do(lambda x, y: x - y, 10, 20)
do(lambda x, y: x + y, 10, 20)
do(lambda x, y: x * y, 10, 20)
do(lambda x, y: x / y, 10, 20)
讨论区