我在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
中不会引发错误?
答案 0 :(得分:1)
因为您没有分配给非本地名称。您使用了一个,但这很好;您分配了其属性之一,而没有更改名称本身的绑定。
请注意,如果b
是列表或字典,并且您修改了其中一个成员,则此方法将完全相同。