什麼是命名空間

命名空間是一個系統,它為Python中的每個對象提供唯一的名稱。對象可以是變數或方法。Python本身以Python字典的形式維護命名空間。讓我們來看一個例子,計算機中的目錄文件系統結構。不用說,一個人可以擁有多個目錄,每個目錄中都有一個具有相同名稱的文件。但是,人們可以通過指定文件的絕對路徑來定向文件。

實時示例,命名空間的作用就像一個姓氏。有人可能在課堂上找不到一個「愛麗絲」可能會有多個「愛麗絲」,但當你特別要求「愛麗絲李」或「愛麗絲克拉克」(帶姓氏)時,只會有一個(時間不是』)想到多名學生的名字和姓氏都是一樣的)。

在類似的路線上,Python解釋器理解在代碼中試圖指向的確切方法或變數,具體取決於命名空間。因此,單詞本身的劃分提供了更多的信息。它的名稱(表示名稱,唯一標識符)+ 空格(表示與範圍相關的內容)。這裡,名稱可能是任何Python方法或變數,空間取決於嘗試訪問變數或方法的位置。

命名空間的類型

當Python解釋器完全沒有和用戶定義的模塊,方法,類等運行時,一些函數如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中對象的範圍:

範圍是指可從中訪問特定Python對象的編碼區域。因此,無法從代碼中的任何位置訪問任何特定對象,訪問必須由對象的範圍允許。

  • 例1:

# 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

從上面的輸出中可以看出,函數some_func()在main的範圍內,但var在main的範圍內是不可用的。類似地,在內部函數的情況下,外部函數不具有內部局部變數的可訪問性,內部局部變數對於內部函數是局部的並且不在外部函數的範圍內。讓我們舉一個例子來瞭解相同的細節:

  • 示例2:

# 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

本文系翻譯,希望對您有所幫助

推薦閱讀:

相關文章