在尝试运行此代码时,我在获取UnboundLocalError:引用错误之前引用了局部变量。根据LEGB规则,这应该运行良好。
def xyz():
count = 1
def xyz_inner():
count += 1
print count
xyz_inner()
print count
答案 0 :(得分:1)
这里的问题是内部函数中的count
由(扩充的)赋值语句绑定,因此被视为xyz_inner()
的本地。因此,代码第一次尝试执行count += 1
时,之前没有分配(本地)变量count
,因此它确实是一个未绑定的本地。
在nonlocal count
内使用xyz_inner()
可以通过告诉口译员您想要使用xyz()
的{{1}}而不是创建本地来解决问题。
答案 1 :(得分:0)
def xyz():
count = 1
def xyz_inner():
count += 1
print count, locals()
xyz_inner()
print count
print hasattr(globals, 'count')
print hasattr(xyz, 'count')
>>>
False
False
在dict
或list
等任何可变对象中定义变量(使用相同的引用),并使用扩充赋值更新它。
它有效: -
def xyz():
count = {'value': 1}
def xyz_inner():
count['value'] += 1
print count['value'],
xyz_inner()
print count
xyz()