1

以下代码按预期工作:

def f():
    def g():
        print(a)
    a = 42
    return g
f()()

g从它的关闭加载a,一切都很好。

现在这个片段可怕地失败了UnboundLocalError

def f():
    def g():
        print(a)
        a = 43
    a = 42
    return g
f()()

看着dis,第一个代码调用LOAD_CLOSURE,第二个没有。考虑到这一点,很明显为什么会引发错误。然而问题是这样的:

python如何知道何时从闭包或本地范围中绘制变量?(考虑到print(a)前面a = 43的。)

这个决定是在编译时做出的吗?(好吧,看起来像,考虑到print(a)之前a = 43

这篇文章不是关于nonlocalorglobal关键字的。

4

1 回答 1

5

在没有nonlocalglobal声明的情况下,Python 在字节码编译时通过检查函数对变量的赋值来确定变量是否是本地的。由于第二个示例分配给ain g,因此在该版本中a是本地的。g

于 2013-08-27T23:35:20.577 回答