我试图找到这个错误的原因。守则
def x():
if b == 1:
a = a + 4
print(a)
a = 5
b = 1
x()
第二次使用我的变量a
:a = a + 4
,发生错误。
我正在开发一个主要使用此类作业的程序。
答案 0 :(得分:6)
作业a = a + 4
告诉翻译人员使用a
的本地版本而不是全局参考。
现在在赋值a = a + 4
中,当解释器查找局部变量a
的值时,解释器会发现变量未定义并将生成UnboundLocalError: local variable 'a' referenced before assignment
。
您可以使用global
关键字更改此行为:
def x():
global a
if b == 1:
a = a + 4
print(a)
return
a = 5
b = 1
x()
问:坚持,为什么翻译人员抱怨b
?
答:因为您未在函数中分配任何内容 b ,因此解释程序将使用变量{{ 1}}来自全球范围。
但是,这种情况不需要全局变量。避免全局变量的更优雅的版本是:
b
请注意,此功能的行为略有不同。您的原始函数未返回任何内容,而我的def x(a, b):
if b == 1:
a = a + 4
return a
print( x(5, 1) )
的返工版本将始终返回x
的值,无论是已修改还是未修改,具体取决于a
的值。
这样做的好处是可以使用返回的值,并且可以将b
移出函数。