我正在自己学习Python,我对以下代码中的错误感到困惑
glob_var = 0
def print_glob_var():
s = 0
while glob_var > 0:
s = s+1
glob_var = glob_var - 1
return s
#print (globvar)
def main():
global glob_var
glob_var = 4
print_glob_var()
main()
我得到错误"UnboundLocalError:分配前引用的本地变量'glob_var'"。然而,当我只使用打印代码块工作良好。
我做错了什么。我使用Python 3.5.2
为了改变函数内部全局变量的值,必须在函数内部声明它为global
。您似乎在功能main
中这样做,但在功能print_glob_var
中没有。
Python分析print_glob_var
的体,看到对glob_var
(特别是glob_var = glob_var - 1
)的赋值而没有global
语句,并根据glob_var
是它期望在函数中定义的局部变量来决定。如果你删除了这个赋值,你将不会再得到这个错误,当然这会产生新的问题。或者,您可以将global glob_var
添加到函数中。在main
中包含它是不够的,在变量使用的任何地方都需要该语句。
这就是为什么在Python中使用非常量全局变量是一个坏主意的原因。了解类
glob_var = 4
def print_glob_var():
global glob_var # Set glob_var as global
s = 0
while glob_var > 0:
s = s+1 # You can do s += 1 here
glob_var = glob_var - 1
print(glob_var) # Your commented out print() was after the return statement
return s # so it would never be reached.
def main():
print_glob_var()
main()