python – 为什么这两个’x’引用不同的变量?
发布时间:2020-12-20 12:29:07 所属栏目:Python 来源:网络整理
导读:在此代码中,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 = 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指的是两段代码中的全局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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |