溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中名稱空間與作用域的示例分析

發(fā)布時(shí)間:2022-03-04 15:01:01 來源:億速云 閱讀:148 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下python中名稱空間與作用域的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

函數(shù)內(nèi)部的函數(shù)只能在函數(shù)內(nèi)部調(diào)用,不能在函數(shù)外部調(diào)用,通過接下來的學(xué)習(xí)你將會(huì)知道為什么會(huì)出現(xiàn)這種情況。

python中名稱空間與作用域的示例分析

一、名稱空間

名稱空間(name spaces):在內(nèi)存管理那一章節(jié)時(shí),我們?cè)f到變量的創(chuàng)建其實(shí)就是在內(nèi)存中開辟了一個(gè)新的空間。但是我們一直在回避變量名的存儲(chǔ),其實(shí)在內(nèi)存中有一塊內(nèi)存空間存儲(chǔ)變量名與變量間的綁定關(guān)系的空間,而這個(gè)空間稱為名稱空間,真正存名字的地方是棧區(qū),名稱空間只是把棧區(qū)分成為幾個(gè)部分,有了名稱空間我們就可以在棧區(qū)存放相同的名字。

python中名稱空間與作用域的示例分析

1.1 內(nèi)置名稱空間

內(nèi)置名稱空間:存放Pyhton解釋器自帶的名字,如int、float、len

生命周期:在解釋器啟動(dòng)時(shí)生效,在解釋器關(guān)閉時(shí)失效

1.2 全局名稱空間

全局名稱空間:除了內(nèi)置和局部的名字之外,其余都存放在全局名稱空間,如下面代碼中的x、func、lz

生命周期:在文件執(zhí)行時(shí)生效,在文件執(zhí)行結(jié)束后失效

python中名稱空間與作用域的示例分析

1.3 局部名稱空間

局部名稱空間:用于存放函數(shù)調(diào)用期間函數(shù)體產(chǎn)生的名字,如下面代碼的f2

生命周期:在文件執(zhí)行時(shí)函數(shù)調(diào)用期間時(shí)生效,在函數(shù)執(zhí)行結(jié)束后失效

注意:即使是對(duì)同一個(gè)函數(shù),即便它是空函數(shù),如果我們對(duì)它進(jìn)行多次調(diào)用的話,調(diào)用一次產(chǎn)生一個(gè)局部名稱空間,

python中名稱空間與作用域的示例分析

python中名稱空間與作用域的示例分析

1.4 加載順序

由于.py文件是由Python解釋器打開的,因此一定是在Python解釋器中的內(nèi)置名稱空間加載結(jié)束后,文件才開始打開,這個(gè)時(shí)候才會(huì)產(chǎn)生全局名稱空間,但文件內(nèi)有某一個(gè)函數(shù)被調(diào)用的時(shí)候,才會(huì)開始產(chǎn)生局部名稱空間,因此名稱空間的加載順序?yàn)椋簝?nèi)置–》全局–》局部。

1.5 查找順序

由于名稱空間是用來存放變量名與值之間的綁定關(guān)系的,所以但凡要查找名字,一定是從三者之一找到,查找順序?yàn)椋?br/>從當(dāng)前的所在位置開始查找,如果當(dāng)前所在的位置為局部名稱空間,則查找順序?yàn)椋壕植卡C》全局–》內(nèi)置。

python中名稱空間與作用域的示例分析

二、作用域

域指的是區(qū)域,作用域即作用的區(qū)域。

2.1 全局作用域

全局作用域:全局有效,被所有的函數(shù)共享,包含內(nèi)置名稱空間和全局名稱空間。

python中名稱空間與作用域的示例分析

2.2 局部作用域

局部作用域:局部有小,臨時(shí)存儲(chǔ),只包含局部名稱空間。

python中名稱空間與作用域的示例分析

2.3 注意點(diǎn)

需要注意的是:作用域關(guān)系在函數(shù)定義階段就固定死了,與函數(shù)的調(diào)用無關(guān)。

python中名稱空間與作用域的示例分析

2.4 函數(shù)對(duì)象+作用域應(yīng)用

python中名稱空間與作用域的示例分析

三、補(bǔ)充知識(shí)點(diǎn)

3.1 global關(guān)鍵字

修改全局作用域中的變量。

python中名稱空間與作用域的示例分析

3.2 nonlocal關(guān)鍵字

修改局部作用域中的變量。

python中名稱空間與作用域的示例分析

3.3 注意點(diǎn)

  • 在局部想要修改全局的可變類型,不需要任何聲明,可以直接修改。

  • 在局部如果想要修改全局的不可變類型,需要借助global聲明,聲明為全局的變量,即可直接修改。

以上是“python中名稱空間與作用域的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI