python 中的属性未引发嵌套函数的 UnboundLocalError
UnboundLocalError for nested function NOT raised for attribute in python
我在 UnboundLocalError
上简要浏览了几十个关于 python 中的嵌套函数的问题,我认为我理解了,直到我尝试使用自定义 class实例
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
是一个列表或字典并且您修改了其中一个成员,这将完全相同。
我在 UnboundLocalError
上简要浏览了几十个关于 python 中的嵌套函数的问题,我认为我理解了,直到我尝试使用自定义 class实例
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
是一个列表或字典并且您修改了其中一个成员,这将完全相同。