今天遇到个 比较坑的代码, 以为结果是 [0,2,4,6] 结果发现不是
过程如下:
版本1:
def multipliers():
return[lambda x :i*x for i in range(4)]
print([m(2) for m in multipliers()])
版本2:
def multipliers():
return[(lambda x :i*x) for i in range(4)]
print([m(2) for m in multipliers()])
版本3:
def multipliers():
z;
a=[]
for i in range(4):
z=i:
a.append(lambda x :z*x)
return a
for m in multipliers(): # m 是匿名函数 def nn(x): return x*z (z=3)
print(m(2))
结果是 [6,6,6,6]
lambda 说明
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。