說說 Python 的作用域

在函數內定義的變量,在函數的 “局部作用域” 中;而在函數外定義的變量,在 “全局作用域” 中。

在程序啓動時,會創建一個全局作用域。當程序終止時,就會銷燬這個作用域,其內部保存的變量也會被一同銷燬。

一個函數被調用時,會創建一個局部作用域。當這個函數返回時,這個作用域就會被銷燬。

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


總的來說,作用域與變量遵守以下規則:

  1. 全局作用域中的代碼,無法使用局部作用域中定義的變量。
  2. 局部作用域可以使用局部作用域中的定義的變量。
  3. 一個函數局部作用域中,無法使用其它局部作用域中的變量。
  4. 變量如果分別定義在不同的作用域中,那麼可以同名(不建議這樣做)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章