詳解Python 中的命名空間、變量和范圍
Python 中的命名空間、變量和范圍
什麼是命名空間?
首先,我們需要感知python中的名稱(標識符)是什麼。眾所周知,在python中,一切都是對象。名稱幫助我們訪問底層對象。例如,當我們做作業時 a = 1
, 1
是存儲在內存中的對象,a 是我們與之關聯的名稱。我們可以通過內置函數獲取某個對象的地址(在 RAM 中), ID()
.讓我們看看如何使用它。
a = 1 打印('id(1)=',id(1)) 打印('id(a)=',id(a)) 輸出: id(1) = 9801248 id(a) = 9801248
在這裡,兩者都指同一個對象 1
,所以他們擁有相同的id。
現在我們知道瞭名稱是什麼,我們可以繼續討論名稱空間的概念。簡單地說,命名空間是名稱的集合。在 Python 中,您可以將命名空間想象為您定義的每個名稱到相應對象的映射。不同的命名空間可以在給定時間共存,但完全隔離。當我們啟動 Python 解釋器時,會創建一個包含所有內置名稱的命名空間,並且隻要解釋器運行,它就存在。這就是內置函數像 ID()
, 打印()
我們始終可以從程序的任何部分獲得等。每個模塊創建自己的全局命名空間。這些不同的命名空間是隔離的。因此,不同模塊中可能存在的相同名稱不會發生沖突。
變量和表達式
要將現實世界的問題轉化為可以通過算法解決的問題,有兩個相互關聯的任務。首先,選擇變量,其次,找到與這些變量相關的表達式。變量是附加在對象上的標簽;它們不是對象本身。它們也不是對象的容器。變量不包含對象,而是充當對象的指針或引用。例如,考慮以下代碼:
在這裡,我們創建瞭一個變量 a,它指向一個列表對象。我們創建另一個變量 b,它指向同一個列表對象。當我們向這個列表對象追加一個元素時,這種變化會同時反映在 a 和 b 中。
Python 是一種動態類型語言。在程序執行期間,變量名可以綁定到不同的值和類型。例如,每個值都是類型、字符串或整數;但是,指向該值的名稱沒有特定類型。這與許多語言(例如 C 和 Java)不同,其中名稱表示內存中的固定大小、類型和位置。這意味著當我們在 Python 中初始化變量時,我們不需要聲明類型。此外,變量,或者更具體地說是它們指向的對象,可以根據分配給它們的值更改類型,例如:
變量范圍
瞭解函數內部變量的作用域規則很重要。每次執行函數時,都會創建一個新的本地命名空間。這表示一個本地環境,其中包含由函數分配的參數和變量的名稱。為瞭在調用函數時解析命名空間,Python 解釋器首先搜索本地命名空間(即函數本身),如果未找到匹配項,則搜索全局命名空間。這個全局命名空間是定義函數的模塊。如果仍未找到該名稱,它將搜索內置命名空間。最後,如果失敗,則解釋器會引發 NameError 異常。考慮以下代碼:
在示例中,定義瞭兩個全局變量。我們需要使用關鍵字 global 告訴解釋器,在函數內部,我們指的是一個全局變量。當我們將此變量更改為 11 時,這些更改會反映在全局范圍內。但是,我們設置為 21 的變量 b 是函數的局部變量,函數內部對其所做的任何更改都不會反映在全局范圍內。當我們運行函數並打印 b 時,我們看到它保留瞭它的全局值。
到此這篇關於Python 中的命名空間、變量和范圍的文章就介紹到這瞭,更多相關Python命名空間內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 總結Python變量的相關知識
- Python變量教程之全局變量和局部變量
- Python函數命名空間和作用域(Local與Global)
- 淺談Python從全局與局部變量到裝飾器的相關知識
- Python全局變量關鍵字global的簡單使用