3 回答
TA贡献1946条经验 获得超3个赞
考虑以下代码:
a = 1
def f():
# uses global because it hasn't been rebound
print 'f: ',a
def g():
# variable is rebound so global a isn't touched
a = 2
print 'g: ',a
def h():
# specify that the a we want is the global variable
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
基本上,当您需要每个函数访问同一变量(对象)时,都使用全局变量。不过,这并不总是最好的方法。
TA贡献2011条经验 获得超2个赞
全局可以被任何函数访问,但是只有在函数内部使用'global'关键字明确声明它时,才能对其进行修改。以实现计数器的函数为例。您可以使用如下全局变量来做到这一点:
count = 0
def funct():
global count
count += 1
return count
print funct() # prints 1
a = funct() # a = 2
print funct() # prints 3
print a # prints 2
print count # prints 3
现在,这一切都很好,但是,除了常量之外,对其他任何东西都使用全局变量通常不是一个好主意。您可以使用闭包作为替代实现,这样可以避免污染名称空间并且更加简洁:
def initCounter():
count = 0
def incrementCounter():
count += 1
return count
#notice how you're returning the function with no parentheses
#so you return a function instead of a value
return incrementCounter
myFunct = initCounter()
print myFunct() # prints 1
a = myFunct() # a = 2
print myFunct() # prints 3
print a # prints 2
print count # raises an error!
# So you can use count for something else if needed!
添加回答
举报