Python中的全局变量错误

时间:2016-11-06 11:38:32

标签: 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

3 个答案:

答案 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()