我正在学习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
答案 0 :(得分:1)
要在函数内更改全局变量的值,必须在函数内声明它global
。您似乎在函数main
中执行此操作,但未在函数print_glob_var
中执行此操作。
答案 1 :(得分:1)
Python分析print_glob_var
的正文,查看glob_var
(具体为glob_var = glob_var - 1
)和global
语句的作业,并根据{{1}进行判断它是一个局部变量,它希望在函数中定义。如果删除作业,则不会再出现此错误,但当然会产生新问题。或者,您可以将glob_var
添加到该函数中。将它包含在global glob_var
中是不够的,在使用变量的任何地方都需要该语句。
这就是在Python中使用非常量全局变量的一个坏主意。了解课程。
答案 2 :(得分:1)
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()