x = 0y = [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指的是两段代码中的全局x.实际上,在两段代码中只有全局x.这里没有局部变量,只有全局变量.在第一个示例中,x的全局值为2,因为这是列表推导分配给它的最后一个值.列表推导将其变量泄漏到封闭范围内,如@wim所述.由于此处的封闭范围是全局范围,因此变量x将泄漏到全局范围,覆盖您之前设置的值0.
在第二个示例中,您创建列表推导,但随后将其值分配给(全局)变量x.这会覆盖x中已有的内容,因此全局变量x的值现在是列表.
在这两种情况下,当您调用列表中的一个函数(任何一个!)时,它将返回x的当前值.你可以在这里看到:
>>> y = [lambda : x for x in range(3)]>>> y[0]()2>>> x = 88>>> y[0]()88>>> x = [lambda : x for x in range(3)]>>> y = x>>> y[0]()[<function <lambda> at 0x017789B0>,<function <lambda> at 0x01828DB0>,<function <lambda> at 0x01828F30>]>>> x = 88>>> y[0]()88总结
以上是内存溢出为你收集整理的python – 为什么这两个’x’引用不同的变量?全部内容,希望文章能够帮你解决python – 为什么这两个’x’引用不同的变量?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)