我已经简单地浏览了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
是列表或字典,并且您修改了其成员之一,则此方法将完全相同。