请稍候,加载中....

lambda表达式

lambda表达式可以返回一个匿名函数,在python中,任何函数都可以像可以像普通的数字、字符串、列表数据类型一样赋值给一个变量,所以函数也可以作为另一个函数的参数使用,称为高阶函数。

函数的对象特性

函数其实是一个对象,所以我们可以把一个函数赋值一个变量

# 普通函数
def myfun():
    print("hello python-xp.com")

# 可以将普通函数赋值给一个变量
# 通过该变量来调用函数
fun = myfun
fun()

# fun 与 myfun实际上指向同一个函数对象
print(id(myfun))
print(id(fun))

在上面的代码中,funmyfun是同一个函数,也就是两个标识符都指向同一个函数对象

匿名函数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)

 


Python学习手册-