嵌套函数的UnboundLocalError未针对python中的属性引发

时间:2019-02-22 11:25:38

标签: python nested-function

我在UnboundLocalError上浏览了数十个qus,以查找python中的嵌套函数,并且我认为我能理解,直到我尝试使用自定义类实例

def fn1():
    a = 1

    def fn1a():
        print(a)
        a += 1
        print(a)

    fn1a()


class B:
    v = 1


def fn2():
    b = B()

    def fn2a():
        print(b.v)
        b.v += 1
        print(b.v)

    fn2a()


fn2()  # prints 1 then 2
fn1()  # raises UnboundLocalError

为什么在fn2中不会引发错误?

1 个答案:

答案 0 :(得分:1)

因为您没有分配给非本地名称。您使用了一个,但这很好;您分配了其属性之一,而没有更改名称本身的绑定。

请注意,如果b是列表或字典,并且您修改了其中一个成员,则此方法将完全相同。