全局的数据使用,会定义很多的全局变量,但是不要随便的修改,这是很危险的。 然而今天就出现了一个问题,修改了全局变量,导致结果错误,而又一直没被发现。
- 全局变量用的时候要判断,是否还是原来的数据。
- 要不就是把全局变量转化到局部变量在进行修改使用。
如果需要在一个函数内修改全局变量,就使用 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 变量。