在函數內定義的變量,在函數的 「局部做用域」 中;而在函數外定義的變量,在 「全局做用域」 中。bash
在程序啓動時,會建立一個全局做用域。當程序終止時,就會銷燬這個做用域,其內部保存的變量也會被一同銷燬。函數
一個函數被調用時,會建立一個局部做用域。當這個函數返回時,這個做用域就會被銷燬。ui
全局做用域內若是使用了局部變量,就會拋錯:spa
def cook():
dumplings = 3
cook()
print(dumplings)
複製代碼
運行結果:code
NameError: name 'dumplings' is not definedcdn
由於 cook() 返回後,其局部做用域中的 dumplings 變量也被一同銷燬了,因此在全局做用域內沒法訪問。blog
def dumpling():
dumplings = 5
print('dumpling()=' + str(dumplings))
def cook():
dumplings = 3
dumpling()
print('cook()=' + str(dumplings))
cook()
複製代碼
運行結果:作用域
dumpling()=5 cook()=3string
cook() 中調用了 dumpling(),所以其同名的 dumplings 變量被從新定義了。也就是說,一個函數內定義的局部變量與其它函數內部定義的變量,是徹底隔離的。it
另外,這個示例也說明了:不一樣做用域中的變量,能夠同名。但不建議這樣作,由於變量名相同,咱們很差跟蹤代碼。
def cook2():
print(dumplings)
dumplings = 3
cook2()
複製代碼
運行結果:
3
總的來講,做用域與變量遵照如下規則: