python lambda 小函数

2018-11-05  本文已影响0人  积土成城

今天遇到个 比较坑的代码, 以为结果是 [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++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

上一篇 下一篇

猜你喜欢

热点阅读