嵌套函数的UnboundLocalError没有为python中的属性引发

问题描述 投票:1回答:1

我简要介绍了UnboundLocalError上的几十个qus for 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中引发错误?

python nested-function
1个回答
1
投票

因为您没有分配到非本地名称。你用了一个,但那没关系;您分配了其中一个属性,而不更改名称本身绑定的内容。

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

© www.soinside.com 2019 - 2024. All rights reserved.