嵌套函数中locals()函数的奇怪行为

时间:2019-05-02 17:13:25

标签: python scope closures local-variables

要用作封闭函数,内部函数访问周围范围中定义的变量很重要。 但是,为什么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}中更改之后。 实际上,它甚至不是局部变量,因为可以从周围范围进行修改。 到底是怎么回事?

1 个答案:

答案 0 :(得分:-2)

本地符号表存储与程序的本地范围有关的所有信息,并可以使用locals()方法在Python中进行访问。但是可以从scope

访问更多详细信息