1. 程式人生 > 程式設計 >說說 Python 的作用域

說說 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. 變數如果分別定義在不同的作用域中,那麼可以同名(不建議這樣做)。