这个问题是经典的“陷阱”,是在lambda函数被调用之前,不会查找
ilambda函数中引用的内容。当时的值是结束时绑定到的最后一个值,即。
i``for-loop``2
如果绑定
i到
lambda函数定义中的默认值,则每个函数都
i将成为局部变量,并且在 定义
而不是调用lambda时,将评估其默认值并将其绑定到该函数。
因此,当调用lambda时,
i现在在 本地范围内 查找,并使用其默认值:
In [177]: bases = [lambda x, i=i: x**i for i in range(3)]In [178]: print([b(5) for b in bases])[1, 5, 25]
以供参考:
- Python作用域和名称空间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)