📅  最后修改于: 2020-01-13 11:51:58             🧑  作者: Mango
全局变量是在函数外部定义和声明的变量,有时我们需要在函数内部使用它们:
# 这个函数实用了全局变量s
def f():
print s
# Global scope
s = "我爱芒果文档"
f()
输出:
我爱芒果文档
如果在函数范围内也定义了相同名称的变量,则它将仅打印函数内部给定的值,而不输出全局变量的值:
# 函数内部的变量s
def f():
s = "我也是."
print s
# Global scope
s = "我爱芒果文档"
f()
print s
输出:
我也是.
我爱芒果文档.
在调用函数f()之前,变量s被定义为字符串“ 我爱芒果文档”。f()中唯一的语句是“ print s”语句。如果没有local变量s,打印将使用global的值。
问题是,如果我们在函数f()中更改s的值,将会发生什么?也会影响全局变量吗?我们在以下代码中对其进行测试:
def f():
print s
# 如果注释下面的行,程序会报错.
s = "我也是."
print s
# 全局变量
s = "我爱芒果文档"
f()
print s
输出:
Line 2: undefined: Error: local variable 's' referenced before assignment
为了使上述程序有效,我们需要使用“ global”关键字。如果我们要进行分配/更改它们,则只需要在函数中使用global关键字即可。为什么?Python“假定”由于要在f()内部分配s而需要局部变量,因此第一个print语句会抛出此错误消息。要告诉Python,我们要使用全局变量,我们必须使用关键字“ global”,如以下示例所示:
# 展示使用global关键字,改变's'
def f():
global s
print s
s = "芒果文档的Python部分"
print s
# 全局变量
s = "Python很牛!"
f()
print s
现在就没有歧义了。
输出:
Python很牛!
芒果文档的Python部分.
芒果文档的Python部分.
一个很好的例子:
a = 1
# 会使用全局变量a,因为没有本地的a变量
def f():
print '在f()内 : ', a
# 变量'a'被重新定义成local
def g():
a = 2
print '在g()内 : ',a
# 使用global关键字调整global变量'a'
def h():
global a
a = 3
print '在h()内 : ',a
# 全局范围
print 'global : ',a
f()
print 'global : ',a
g()
print 'global : ',a
h()
print 'global : ',a
输出:
global : 1
在f()内) : 1
global : 1
在g()内 : 2
global : 1
在h()内 : 3
global : 3