要用作封闭函数,内部函数访问周围范围中定义的变量很重要。 但是,为什么locals()函数告诉我们这些变量是本地名称空间的成员,即使在调用locals()之后也引用了这些变量?
即使在return语句之后,我在调用locals()之后也引用了非局部变量x。我什至在它之前加上了关键字nonlocal。 但是什么都没有改变。
def f():
x=0
def g():
print(locals())
return
nonlocal x
g() # prints "{'x': 0}"
x=1
g() # prints "{'x': 1}
return g
g=f()
g() # prints "{'x': 1}
由于x是在调用locals()之后(而不是之前)引用的,所以我希望打印出一个空字典{}。 但是,结果是首先是{'x':0},然后是在外部范围{'x':1}中更改之后。 实际上,它甚至不是局部变量,因为可以从周围范围进行修改。 到底是怎么回事?