在这种情况下,全局变量的范围是什么?

时间:2014-03-18 09:28:33

标签: python python-3.x

我是python的新手,所以这可能是一个愚蠢的问题。

获取此示例代码:

y, z = 1, 2
def all_global():
    global x
    x = y + z

print(x,y,z)

据我了解,global语句将声明全局变量x,而print语句应打印出3,2,1

但我得到了

NameError: global name 'x' is not defined

那么global语句在这种情况下实际上做了什么?

1 个答案:

答案 0 :(得分:4)

是的,该函数使x成为全局函数,但x仅在all_global()实际上被称为时才会被绑定。在此之前,没有名称x绑定。

换句话说,仅仅在函数中声明x全局是不够的;它所做的就是改变函数运行时将设置的命名空间x,它不会预先定义名称。在这种情况下, 会绑定什么?

调用函数集xprint()调用有效:

>>> y, z = 1, 2
>>> def all_global():
...     global x
...     x = y + z
... 
>>> print(x,y,z)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> all_global()
>>> print(x,y,z)
3 1 2