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!
添加回答
舉報