我是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
语句在这种情况下实际上做了什么?
答案 0 :(得分:4)
是的,该函数使x
成为全局函数,但x
仅在all_global()
实际上被称为时才会被绑定。在此之前,没有名称x
绑定。
换句话说,仅仅在函数中声明x
全局是不够的;它所做的就是改变函数运行时将设置的命名空间x
,它不会预先定义名称。在这种情况下, 会绑定什么?
调用函数集x
和print()
调用有效:
>>> 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