python – 为什么这两个’x’引用不同的变量?

python – 为什么这两个’x’引用不同的变量?,第1张

概述在此代码中,lambda中的x指的是for语句中的x.所以y [0]()返回2: 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指的是第一段代码中的 在此代码中,lambda中的x指的是for语句中的x.所以y [0]()返回2:

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’引用不同的变量?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存