Python中的全局和局部变量


问题内容

我正在学习Python。一本关于Python 3的书说以下代码应该可以正常工作:

def funky():
    print(myvar)
    myvar = 20
    print(myvar)

myvar = 10
funky()

但是当我在Python 3.3中运行它时,我得到了

UnboundLocalError: local variable 'myvar' referenced before assignment

错误。我的理解是,首先print(myvar)funky应该是10,因为它是一个全局变量。第二个print(myvar)应该是20,因为本地myvar定义为20。这是怎么回事?请帮助澄清。


问题答案:

您需要global在分配值之前调用函数。

def funky():
    global myvar
    print(myvar)
    myvar = 20
    print(myvar)

myvar = 10
funky()

请注意,您可以在不调用global的情况下打印值,因为无需使用即可访问全局变量global,但是尝试分配值将需要它。