Python全局变量/作用域混淆[重复]


问题内容

这个问题已经在这里有了答案

Python范围:“
UnboundLocalError:赋值之前引用了局部变量’c’”(重复)
(4个答案)

5年前关闭。

我已经开始自学python,并且注意到与全局变量和范围有关的某些奇怪事情。当我运行这个:

x = 2 
y = 3 
z=17 
def add_nums():
    y = 6 
    return z+y

打印结果为23 …但是,当我将返回值扩展为:

x = 2 
y = 3 
z=17 
def add_nums(): 
    y = 6 
    z = z + y 
    return z

我在第6行收到以下错误:

Local name referenced but not bound to a value.
A local name was used before it was created. You need to define the     
method or variable before you try to use it.

我很困惑为什么我在这里遇到错误,因为z是全局可访问的。


问题答案:

当变量在等号的左侧时,python将创建一个局部变量。当变量位于等号的右侧时,python将尝试查找局部变量,如果他找不到局部变量,则它将使用全局变量。在您的示例中,z位于等号的右侧和左侧,以避免歧义python引发错误。您需要使用global语法来避免这种情况:

x = 2 
y = 3 
z=17 
def add_nums(): 
    global z
    y = 6 
    z = z + y 
    return z