什么是命名空間
命名空間是一個系統,它為中的每個對象提供唯一的名稱。對象可以是變量或方法。本身以字典的形式維護命名空間。讓我們來看一個例子,計算機中的目錄文件系統結構。不用說,一個人可以擁有多個目錄,每個目錄中都有一個具有相同名稱的文件。但是,人們可以通過指定文件的絕對路徑來定向文件。
實時示例,命名空間的作用就像一個姓氏。有人可能在課堂上找不到一個“愛麗絲”可能會有多個“愛麗絲”,但當你特別要求“愛麗絲李”或“愛麗絲克拉克”(帶姓氏)時,只會有一個(時間不是’)想到多名學生的名字和姓氏都是一樣的)。
在類似的路線上,解釋器理解在代碼中試圖指向的確切方法或變量,具體取決于命名空間。因此語句在命名空間中無效,單詞本身的劃分提供了更多的信息。它的名稱(表示名稱,唯一標識符)+ 空格(表示與范圍相關的內容)。這里,名稱可能是任何方法或變量,空間取決于嘗試訪問變量或方法的位置。
命名空間的類型
當解釋器完全沒有和用戶定義的模塊,方法,類等運行時,一些函數如print(),id()總是存在,這些函數是在命名空間中構建的。當用戶創建模塊時,將創建全局命名空間,稍后創建本地函數將創建本地命名空間。在內置的命名空間包含全局命名空間和全局命名空間包含局部命名空間。
命名空間的生命周期
命名空間的生命周期取決于對象的范圍語句在命名空間中無效,如果對象的范圍結束,則該命名空間的生命周期結束。因此,無法從外部命名空間訪問內部命名空間的對象。
# var1 is in the global namespace
var1 = 5
def some_func():
# var2 is in the local namespace

var2 = 6
def some_inner_func():
# var3 is in the nested local
# namespace
var3 = 7
如下圖所示,相同的對象名稱可以存在于多個名稱空間中,因為同名的名稱由其名稱空間維護。
但在某些情況下,可能只對更新或處理全局變量感興趣,如以下示例所示,應將其明確標記為全局變量或更新或過程。
# Python program processing
# global variable

count = 5
def some_method():
global count
count = count + 1
print(count)
some_method()
6
中對象的范圍:
范圍是指可從中訪問特定對象的編碼區域。因此,無法從代碼中的任何位置訪問任何特定對象,訪問必須由對象的范圍允許。
# Python program showing

# a scope of object
def some_func():
print("You are welcome to some_func")
print(var)
some_func()
You are welcome to some_func
Traceback (most recent call last):
File "/home/ab866b415abb0279f2e93037ea5d6de5.py", line 4, in
some_func()

File "/home/ab866b415abb0279f2e93037ea5d6de5.py", line 3, in some_func
print(var)
NameError: name 'var' is not defined
從上面的輸出中可以看出,函數()在main的范圍內,但var在main的范圍內是不可用的。類似地,在內部函數的情況下,外部函數不具有內部局部變量的可訪問性,內部局部變量對于內部函數是局部的并且不在外部函數的范圍內。讓我們舉一個例子來了解相同的細節:
# Python program showing
# a scope of object
def some_func():
print("Inside some_func")
def some_inner_func():
var = 10

print("Inside inner function, value of var:",var)
some_inner_func()
print("Try printing var from outer function: ",var)
some_func()
Inside some_func
Inside inner function, value of var: 10
Traceback (most recent call last):
File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 8, in
some_func()
File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 7, in some_func
print("Try printing var from outer function: ",var)
NameError: name 'var' is not defined
本文系翻譯,希望對您有所幫助