在此代码中,lambda 中的 x 引用 for 语句中的 x。所以y[0]()
返回 2:
x = 0
y = [lambda : x for x in range(3)]
y[0]()
但在这段代码中,lambda 中的 x 指的是全局 x,所以x[0]()
返回全局 x 本身:
x = [lambda : x for x in range(3)]
x[0]()
我想知道为什么 lambda 中的 x 指的是第一段代码中的本地 x,但第二段代码中的 x 指的是全局 x。
我猜你使用的是 python 2.x,在列表理解中,临时变量“泄漏”到命名空间中。您可以阅读其中的原因Guido 的这篇博文.
在 Python 2 中,列表推导式“泄漏”了循环控制变量
进入到了周围的范围……这是原本的神器
列表理解的实现;它是 Python 的“脏”之一
小秘密”多年来。
这已在 python 3 中修复。
我不知道你为什么把事情与lambda
,在这里您将在这个更简单的情况下看到相同的行为:
>>> x = 'a'
>>> y = [x for x in 'b','c']
>>> x
'c'
>>> x = [x for x in 'b','c']
>>> x
['b', 'c']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)