请考虑以下代码:
{0: 0}
{0: 0}
执行时提供以下输出:
b
但是如果我尝试更新f()
中的def g():
a = {}
b = 0
def f():
a[0] = b
b+=1
f()
print(a)
return a
a = g()
print(a)
,就像在
UnboundLocalError: local variable 'b' referenced before assignment
它会抛出以下错误:
b
这是预期的吗?我需要在f()
内更新OneFragment
。这不可能吗?
答案 0 :(得分:2)
明确地将a
和b
传递给您的函数。
def g():
a = {}
b = 0
def f(a, b):
a[0] = b
b += 1
return b
b = f(a, b)
return a
答案 1 :(得分:1)
您需要使用nonlocal
关键字:
def g():
a = {}
b = 0
def f():
nonlocal b
a[0] = b
b+=1
f()
print(a)
return a
a = g()
print(a)
这是因为b += 1
等于b = b + 1
,因此您在函数b
内分配f()
。即使它稍后在代码中,这将使它成为整个 f()
函数的局部变量,因此a[0] = b
将引用本地b
尚未定义。使用nonlocal
告诉解释器已经有一个变量b
,它应该在函数中使用,而不是创建一个新的局部变量。