【发布时间】:2021-05-08 15:44:51
【问题描述】:
x = 0
def outer():
x = 1
def inner():
nonlocal x
x = 2
def vnat():
nonlocal x
x = 5
print('vnat:', x)
vnat()
print('inner:', x)
inner()
print('outer:', x)
outer()
print('global:', x)
结果如下:
vnat: 5
inner: 5
outer: 5
global: 0
为什么def outer() 取def vnat() (5) 的值?以及如何从def inner() [2] 中指定def outer() 值为nonlocal x?
我需要的输出:
vnat: 5
inner: 5
outer: 2
global: 0
【问题讨论】:
-
我不知道是不是同样的情况,但是python的作用域有一个错误......见这里:twitter.com/gvanrossum/status/1354305179244392453
-
@OferSadan 这不是错误,它只是类定义的一个特殊功能。在这里,未绑定的本地名称在 global 范围内查找(另请参阅this answer)。这是否可取/直观是另一个问题。