全局的数据使用,会定义很多的全局变量,但是不要随便的修改,这是很危险的。 然而今天就出现了一个问题,修改了全局变量,导致结果错误,而又一直没被发现。
- 全局变量用的时候要判断,是否还是原来的数据。
- 要不就是把全局变量转化到局部变量在进行修改使用。
如果需要在一个函数内修改全局变量,就使用 global
语句。
如果在函数的顶部有 global eggs
这样的代码,它就告诉 Python : “在这个函数中, eggs
指的是全局变量,所以不要用这个名字创建一个局部变量。”
例如,在文件编辑器中输入以下代码:
def spam():
global eggs
eggs = 'spam'
eggs = 'global'
spam()
print(eggs)
spam
def spam():
global eggs
eggs = 'spam' # this is the global
def bacon():
eggs ='bacon' # this is a local def ham():
def ham():
eggs ='bacon' # this is a local def ham():
print(eggs) # this is the global
eggs = 42
spam()
print(eggs)
spam
上面的输出为 spam
。
在 spam()
函数中,eggs
是全局 eggs
变量,
因为在函数的开始处,有针对 eggs
变量的 global
语句 。
在 bacon()
中,eggs
是局部变量,
因为在该函数中有针对它的赋值语句。
在 ham()
中, eggs
是全局变量,
因为在这个函数中,既没有赋值语句,
也没有针对它的 global
语句。
在一个函数中,一个变量要么总是全局变量,
要么总是局部变量。函数中的代码
没有办法先使用名为 eggs
的局部变量,
稍后又在同一个函数中使用全局 eggs
变量。
如果想在一个函数中修改全局变量中存储的值,
就必须对该变量使用 global
语句。
在一个函数中,如果试图在局部变量赋值之前就使用它,像下面的程序这样,Python就会报错:
def spam():
# print(eggs) # ERROR! #此代码会报错
eggs = 'spam local'
eggs ='global'
spam()
运行前面的程序,会产生出错信息。
发生这个错误是因为, Python 看到 spam()
函数中有针对
eggs
的赋值语句,因此认为 eggs
变量是局部变量。
但是因为 print(eggs)
的执行在 eggs
赋值之前,局部变
量 eggs
并不存在。 Python不会退回到使用全局 eggs
变量。