我正在尝试找到此错误的原因。代码是
def x():
if b == 1:
a = a + 4
print(a)
a = 5
b = 1
x()
第二次我的变量a
用来 :a = a + 4
,发生错误。
我正在开发一个主要使用此类作业的程序。
分配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()
Q:等等,为什么翻译不抱怨b
?
A:因为你不是指派任何事情b在函数内,因此解释器将使用该变量b
从全球范围来看。
但是,这种情况不需要全局变量。避免全局变量的更优雅的版本是:
def x(a, b):
if b == 1:
a = a + 4
return a
print( x(5, 1) )
请注意,此函数的行为略有不同。你原来的函数没有返回任何东西,而我的修改版本x
将始终返回值a
,修改或未修改,具体取决于b
.
这样做的优点是您可以使用返回值并且可以移动print()
脱离函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)