Python名稱空間和作用域
阿新 • • 發佈:2020-08-03
Python名稱空間和作用域
總結
emmm,這一塊講了2個內容,一個是名稱空間,一個是作用域。一個一個說吧
名稱空間
A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries
上邊這段是官方文件定義的,簡單來說就是名字到物件的對映,我們知道,python的一切都是物件,你所定義的變數名其實只是個引用。這樣就好理解了。python的名稱空間由python資料結構字典實現。
python的名稱空間細分的話有三種。如圖所示。
這一部分沒什麼好說的,重要的是理解其概念
作用域
A scope is a textual region of a Python program where a namespace is directly accessible. "Directly accessible" here means that an unqualified reference to a name attempts to find the name in the namespace.
由官方文件可以看出,作用域就是可以直接訪問的區域。就是全域性到區域性。這裡舉個程式碼例子就行了。
#demo.py global_var='haha' #定義全域性變數 def tool(): local_var='local' #區域性變數 print(local_var) #訪問區域性變數,可以訪問 print(global_var) #訪問全域性變數,可以訪問 print(local_var) #訪問區域性變數,找不到,無法訪問
驚喜知識
這一部分的驚喜知識是跟作用域有關的。學到了2個關鍵字global和nonlocal
global_var='haha' #定義全域性變數
def tool():
global_var='22'
print(global_var)
print(global_var) #訪問全域性變數,可以訪問
tool()
這段程式碼輸出了2個global_var。輸出結果是不一樣的。tool函式裡在區域性修改了global_var的值,並不影響全域性。此時如果你想影響全域性,你就需要用到關鍵字global.
global_var='haha' #定義全域性變數 def tool(): global global_var global_var='22' print(global_var) tool() print(global_var)
這樣就好了。
nonlocal作用類似,用來修改巢狀作用域的。
def tool():
var=1
def inner():
nonlocal var
var=2
print(var)
inner()
print(var)
tool()