名稱查找,確定作用域,覆蓋

訪問一個屬性時,解釋器必須在三個名稱空間中的一個找到他。

首先從局部名稱空間開始,如果沒有找到,解釋器將繼續查找全局名稱空間。

如果這也失敗了,它將在內建空間名稱裏查找。如果最後的嘗試也失敗了,將會報NameError。


局部空間名稱中找到的名字會隱藏全局或內建名稱空間的對應對象。這就相當於覆蓋了那個全局變量

def foo():
    bar = 299
    print("in foo,bar is",bar)
bar = 101
print("in main,bar is",bar)
foo()

in main,bar is 101
in foo,bar is 299


foo()函數局部名稱空間裏的bar變量覆蓋了全局的bar變量。

雖然bar純在域全局名稱空間裏,但程序首先找到的是局部名稱空間裏的那個,所以覆蓋了全局的哪一個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章