python
使用命名空間記錄變數。python
中的命名空間就像是乙個dict
,key
是變數的名字,value
是變數的值。
當python
中的某段**要訪問乙個變數x
時,python
會在所有的命名空間中尋找這個變數,查詢的順序為:
對於閉包來說,這裡有一點區別,如果在local namespace中找不到變數的話,還會去父函式的local namespace中找變數。
內建函式locals()
, 返回當前函式(方法)的區域性命名空間
def func(a = 1):
b = 2
print(locals())
return a+b
func()
# 可以看出,locals返回的是個dict
內建函式globals()
,返回當前module
的命名空間
def func(a = 1):
b = 2
return a+b
func()
print(globals()) # globals()返回的也是個dict
locals()和globals()有乙個區別是,locals唯讀,globals可以寫
def func(a = 1):
b = 2
return a+b
func()
glos = globals()
glos['new_variable'] = 3
print(new_variable)
# 3 , 我們並沒有顯示定義new_variable這個變數,只是在globals中新增了這個key,在隨後的**中,
#就可以像訪問一般變數一樣來訪問。
def func(a = 1):
b = 2
locs = locals()
locs['c'] = 1
print(c)
func()
# nameerror: name 'c' is not defined
python
中的module
也是物件,所有的modules
都有乙個內建的屬性__name__
,模組的__name__
屬性的值取決於如何使用這個模組,如果import module
,那麼__name__
屬性的值是模組的名字。如果直接執行這個模組的話,那麼__name__
屬性的值就是預設值__main__
。 Python 命名空間
本文介紹python中命名空間中的legb原則。legb含 釋 l local function 函式內的名字空間,包括區域性變數和形參 e enclosing function locals 外部巢狀函式的名字空間 例如closure g global module 函式定義所在模組 檔案 的名字...
python 命名空間
作用域 第五章說過,將輸入字元作為命令放在作用域字典裡 作用域,每個函式都有乙個作用域,就是 字典,字典名字為函式名,鍵為變數,鍵值為變數對應的賦值。函式的作用域為區域性作用域 在函式內部訪問全域性變數,且只是讀取變數的值不重新繫結變數。這樣引用易出錯誤。慎重使用全域性變數 defcombine p...
python命名空間
區域性命名空間下def foo a a if name main foo 報錯資訊 unboundlocalerror local variable a referenced before assignment 全域性命名空間下if name main b b報錯資訊 nameerror name ...