說說 Python 的作用域
阿新 • • 發佈:2019-12-31
在函式內定義的變數,在函式的 “區域性作用域” 中;而在函式外定義的變數,在 “全域性作用域” 中。
在程式啟動時,會建立一個全域性作用域。當程式終止時,就會銷燬這個作用域,其內部儲存的變數也會被一同銷燬。
一個函式被呼叫時,會建立一個區域性作用域。當這個函式返回時,這個作用域就會被銷燬。
1 全域性作用域內,不能使用區域性變數
全域性作用域內如果使用了局部變數,就會拋錯:
def cook():
dumplings = 3
cook()
print(dumplings)
複製程式碼
執行結果:
NameError: name 'dumplings' is not defined
因為 cook() 返回後,其區域性作用域中的 dumplings 變數也被一同銷燬了,所以在全域性作用域內無法訪問。
2 區域性作用域內,不能使用其它區域性作用域內的變數
def dumpling():
dumplings = 5
print('dumpling()=' + str(dumplings))
def cook():
dumplings = 3
dumpling()
print('cook()=' + str(dumplings))
cook()
複製程式碼
執行結果:
dumpling()=5 cook()=3
cook() 中呼叫了 dumpling(),因此其同名的 dumplings 變數被重新定義了。也就是說,一個函式內定義的區域性變數與其它函式內部定義的變數,是完全隔離的。
另外,這個示例也說明瞭:不同作用域中的變數,可以同名。但不建議這樣做,因為變數名相同,我們不好跟蹤程式碼。
3 區域性作用域內,可以使用全域性變數
def cook2():
print(dumplings)
dumplings = 3
cook2()
複製程式碼
執行結果:
3
總的來說,作用域與變數遵守以下規則:
- 全域性作用域中的程式碼,無法使用區域性作用域中定義的變數。
- 區域性作用域可以使用區域性作用域中的定義的變數。
- 一個函式區域性作用域中,無法使用其它區域性作用域中的變數。
- 變數如果分別定義在不同的作用域中,那麼可以同名(不建議這樣做)。