我已经简单地浏览了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中不会引发错误?

最佳答案

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

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

10-08 03:46