Python中的全局变量错误



我正在自己学习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()

最新更新