說說 Python 的做用域

在函數內定義的變量,在函數的 「局部做用域」 中;而在函數外定義的變量,在 「全局做用域」 中。bash

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

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

1 全局做用域內,不能使用局部變量

全局做用域內若是使用了局部變量,就會拋錯:spa

def cook():
    dumplings = 3


cook()

print(dumplings)
複製代碼

運行結果:code

NameError: name 'dumplings' is not definedcdn

由於 cook() 返回後,其局部做用域中的 dumplings 變量也被一同銷燬了,因此在全局做用域內沒法訪問。blog

2 局部做用域內,不能使用其它局部做用域內的變量

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

另外,這個示例也說明了:不一樣做用域中的變量,能夠同名。但不建議這樣作,由於變量名相同,咱們很差跟蹤代碼。

3 局部做用域內,可使用全局變量

def cook2():
    print(dumplings)

dumplings = 3
cook2()
複製代碼

運行結果:

3


總的來講,做用域與變量遵照如下規則:

  1. 全局做用域中的代碼,沒法使用局部做用域中定義的變量。
  2. 局部做用域可使用局部做用域中的定義的變量。
  3. 一個函數局部做用域中,沒法使用其它局部做用域中的變量。
  4. 變量若是分別定義在不一樣的做用域中,那麼能夠同名(不建議這樣作)。
相關文章
相關標籤/搜索