網(wǎng)站首頁 編程語言 正文
Python 中的命名空間、變量和范圍
什么是命名空間?
首先,我們需要感知python中的名稱(標識符)是什么。眾所周知,在python中,一切都是對象。名稱幫助我們訪問底層對象。例如,當我們做作業(yè)時 a = 1
, 1
是存儲在內(nèi)存中的對象,a 是我們與之關(guān)聯(lián)的名稱。我們可以通過內(nèi)置函數(shù)獲取某個對象的地址(在 RAM 中), ID()
.讓我們看看如何使用它。
a = 1 打印('id(1)=',id(1)) 打?。?id(a)=',id(a)) 輸出: id(1) = 9801248 id(a) = 9801248
在這里,兩者都指同一個對象 1
,所以他們擁有相同的id。
現(xiàn)在我們知道了名稱是什么,我們可以繼續(xù)討論名稱空間的概念。簡單地說,命名空間是名稱的集合。在 Python 中,您可以將命名空間想象為您定義的每個名稱到相應(yīng)對象的映射。不同的命名空間可以在給定時間共存,但完全隔離。當我們啟動 Python 解釋器時,會創(chuàng)建一個包含所有內(nèi)置名稱的命名空間,并且只要解釋器??運行,它就存在。這就是內(nèi)置函數(shù)像 ID()
, 打?。ǎ?/code> 我們始終可以從程序的任何部分獲得等。每個模塊創(chuàng)建自己的全局命名空間。這些不同的命名空間是隔離的。因此,不同模塊中可能存在的相同名稱不會發(fā)生沖突。
變量和表達式
要將現(xiàn)實世界的問題轉(zhuǎn)化為可以通過算法解決的問題,有兩個相互關(guān)聯(lián)的任務(wù)。首先,選擇變量,其次,找到與這些變量相關(guān)的表達式。變量是附加在對象上的標簽;它們不是對象本身。它們也不是對象的容器。變量不包含對象,而是充當對象的指針或引用。例如,考慮以下代碼:
在這里,我們創(chuàng)建了一個變量 a,它指向一個列表對象。我們創(chuàng)建另一個變量 b,它指向同一個列表對象。當我們向這個列表對象追加一個元素時,這種變化會同時反映在 a 和 b 中。
Python 是一種動態(tài)類型語言。在程序執(zhí)行期間,變量名可以綁定到不同的值和類型。例如,每個值都是類型、字符串或整數(shù);但是,指向該值的名稱沒有特定類型。這與許多語言(例如 C 和 Java)不同,其中名稱表示內(nèi)存中的固定大小、類型和位置。這意味著當我們在 Python 中初始化變量時,我們不需要聲明類型。此外,變量,或者更具體地說是它們指向的對象,可以根據(jù)分配給它們的值更改類型,例如:
變量范圍
了解函數(shù)內(nèi)部變量的作用域規(guī)則很重要。每次執(zhí)行函數(shù)時,都會創(chuàng)建一個新的本地命名空間。這表示一個本地環(huán)境,其中包含由函數(shù)分配的參數(shù)和變量的名稱。為了在調(diào)用函數(shù)時解析命名空間,Python 解釋器首先搜索本地命名空間(即函數(shù)本身),如果未找到匹配項,則搜索全局命名空間。這個全局命名空間是定義函數(shù)的模塊。如果仍未找到該名稱,它將搜索內(nèi)置命名空間。最后,如果失敗,則解釋器會引發(fā) NameError 異常??紤]以下代碼:
在示例中,定義了兩個全局變量。我們需要使用關(guān)鍵字 global 告訴解釋器,在函數(shù)內(nèi)部,我們指的是一個全局變量。當我們將此變量更改為 11 時,這些更改會反映在全局范圍內(nèi)。但是,我們設(shè)置為 21 的變量 b 是函數(shù)的局部變量,函數(shù)內(nèi)部對其所做的任何更改都不會反映在全局范圍內(nèi)。當我們運行函數(shù)并打印 b 時,我們看到它保留了它的全局值。
原文鏈接:https://www.cnblogs.com/amboke/p/16654311.html
相關(guān)推薦
- 2021-12-16 .NET?Core配置TLS?Cipher(套件)的詳細過程_實用技巧
- 2022-04-20 在Python反編譯中批量pyc轉(zhuǎn)?py的實現(xiàn)代碼_python
- 2022-02-07 SSH連服務(wù)器提示“Permission denied(publickey,gssapi-keyex
- 2022-04-04 運行npm run dev報錯(已解決)
- 2022-06-01 Android自制九宮格解鎖控件_Android
- 2023-04-01 Pytorch基礎(chǔ)之torch.randperm的使用_python
- 2022-10-16 python讀取Windows注冊表的示例代碼_python
- 2022-09-02 react?hooks閉包陷阱切入淺談_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支