嘗試了這一點:Python的全球命名空間和計算順序
A = 1
B = 2
C = A + B
def main():
global C
print A
的main()
輸出爲1
。
這是爲什麼? main
爲什麼要了解用於評估C
的其他全局變量?
嘗試了這一點:Python的全球命名空間和計算順序
A = 1
B = 2
C = A + B
def main():
global C
print A
的main()
輸出爲1
。
這是爲什麼? main
爲什麼要了解用於評估C
的其他全局變量?
全局變量總是可用於Python中的所有本地作用域,包括函數。在這種情況下,main()
A
,B
和C
都在範圍內。
該global
關鍵字不會做它看起來你認爲它所做的;相反,它允許本地範圍操作全局函數(它使全局變量「可寫」,可以這麼說)。考慮這些例子:
c = 4
print c
def foo():
c = 3
print c
foo()
print c
這裏,輸出將是
4
3
4
現在,考慮一下:
c = 4
print c
def foo():
global c
c = 3
print c
foo()
print c
在這種情況下,輸出將是
4
3
3
在第一種情況下,c = 3
僅僅在c
的陰影範圍內(即當功能定義結束時)。在第二種情況下,在我們編寫global c
之後,我們實際上指的是對全局c
的引用,因此更改c
的值將導致永久性更改。
函數可以讀取封閉範圍中的變量。 global declaration用於編寫變量(以表明它們應該寫入全局字典而不是本地字典)。
附加文檔:http://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces – ariefbayu
這個答案並沒有說明「全局」是關於寫變量,而不是關於寫讀它們。 –