我简要介绍了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
中引发错误?
因为您没有分配到非本地名称。你用了一个,但那没关系;您分配了其中一个属性,而不更改名称本身绑定的内容。
请注意,如果b
是一个列表或词典并且您修改了其中一个成员,这将完全相同。