麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > ?python命名空間與作用域

?python命名空間與作用域

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-11-05 21:43:26 1699191806

命名空間是名稱與對象之間的關(guān)系,可以將命名空間看做是字典,其中的鍵是名稱,值是對象。

命名空間不共享名稱。

在命名空間中的名稱能將任何python對象作為值,在不同的命名空間中相同的名稱可以與不同的對象相關(guān)聯(lián)。但是,如果存在名稱解析協(xié)議,則多個命名空間可以一起工作來解析名稱。也就是說,如果有多個命名空間(總是有的),那么可以定義搜索的順序,依次在不同的命名空間里來查找某個名稱(或確認(rèn)其不存在于任何認(rèn)可的命名空間)。在python中,將這一過程定義為作用域。

作用域搜索規(guī)則:LEGB

L:局部的(local)

E:封閉的(Enclosing)

G:全局的(Global)

B:內(nèi)置的(Built-in)

一、局部命名空間

函數(shù)內(nèi)部的命名空間,在調(diào)用函數(shù)的時候生成,調(diào)用結(jié)束時消失。當(dāng)局部命名空間有效時,它是第一個用于檢查某個名字存在性的命名空間。如果在局部命名空間內(nèi)找到該名稱,則返回與名字相關(guān)聯(lián)的對象,反之提示出錯。

二、全局命名空間

python在模塊中維護(hù)命名空間,模塊是一些python文件--包含函數(shù)等對象,并且可以導(dǎo)入其他程序使用。當(dāng)某個模塊被導(dǎo)入之后,該模塊同時引入了一個命名空間,其中包含模塊中所有的名稱和關(guān)聯(lián)的對象,可以通過存儲在沒個模塊中的__dict__來查看這個命名空間,換句話說,字典就是這個模塊的命名空間。

如果想要引用給模塊中的對象,要使用點符號將名稱和模塊名稱關(guān)聯(lián),這實際上是要求將對象與該模塊中的名稱相關(guān)聯(lián)。

當(dāng)python啟動解釋器時,它將自動導(dǎo)入兩個模塊,即模塊__main__和__built-ins__。__main__模塊是默認(rèn)的全局模塊,所有新對象都存儲在其中??梢酝ㄟ^函數(shù)globals來訪問該命名空間的字典。子啊平python解釋器中通過輸入用戶交互時,globals是有效的命名空間。

1.局部賦值規(guī)則

python中有一種稱為“本地賦值”的規(guī)則非常有趣。如果在函數(shù)內(nèi)的任何地方進(jìn)行局部賦值,則該賦值只在當(dāng)前活動的命名空間中創(chuàng)建名稱。有時這將產(chǎn)生副作用,舉例如下:

>>>value=27

>>>deffunc(param1,param2):

forkey,valinlocals().items():

print(key,val)

value=value+1

>>>func(98765,43210)

param198765

param243210

Traceback(mostrecentcalllast):

File"",line1,in

func(98765,43210)

File"",line4,infunc

value=value+1

UnboundLocalError:localvariable'value'referencedbeforeassignment

>>>

首先通過賦值在全局命名空間中創(chuàng)建了變量value。也許你會認(rèn)為,當(dāng)函數(shù)值加1是會先在局部的命名空間中查找變量,無法找到時在全局命名空間中找到該名字??梢圆⒉皇沁@樣。

python提出如下假設(shè),如果在函數(shù)體內(nèi)的任何地方對變量賦值,則python將名稱添加到局部命名空間中。語句value=value+1對對象value進(jìn)行賦值。python假設(shè)無論在何處發(fā)生賦值,value都是函數(shù)func局部命名空間的一部分。當(dāng)python嘗試把1跟value相加時,該value名稱在局部命名空間中,但它沒有關(guān)聯(lián)值,所以python報錯。

問題在于python何時決定使value出現(xiàn)在局部命名空間中。實際value出現(xiàn)在局部命名空間中發(fā)生在代碼運行前,即,在python運行到函數(shù)定義之前。由于創(chuàng)建命名空間時,python會檢查代碼并填充局部命名空間。在python運行那行代碼之前,就發(fā)現(xiàn)了對value的賦值,并把它添加到局部命名空間中,當(dāng)函數(shù)執(zhí)行時,python解釋器認(rèn)為value在局部命名空間中但沒有值,所以會產(chǎn)生錯誤。

2.global語句

有一個方法可以解決上面的問題。如果在函數(shù)體內(nèi),使用global語句將變量聲明為全局變量,那么python不會為該變量在命名空間中創(chuàng)建局部名稱。

三、內(nèi)置模塊

遵循LEGB搜索規(guī)則,如果python不能在局部命名空間中找到某個名稱,則會在全局命名空間中繼續(xù)尋找,它尋找到的將是python的內(nèi)置名稱。

built-in模塊和其他模塊一樣,都具有__dict__屬性,這就是模塊的命名空間

四、封閉式變量

“封閉式”的作用域規(guī)則適應(yīng)于函數(shù)定義函數(shù)時,也就是說,在函數(shù)體內(nèi)定義了一個新的函數(shù)。這個函數(shù)體內(nèi)的函數(shù)是外函數(shù)的局部命名空間中的一部分,意味著只有在外函數(shù)執(zhí)行期間才能夠運行。完整的LEGB規(guī)則是先檢查局部命名空間,之后是封閉在局部命名空間中的其他函數(shù),之后是全局命名空間,在最后以內(nèi)置命名空間結(jié)束。

以上內(nèi)容為大家介紹了python命名空間與作用域,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.dietsnews.net/

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
主站蜘蛛池模板: 我要看a级毛片| 久久这里只精品99re免费| 中文字幕福利片| 欧美激情第一区| 极品丝袜乱系列全集| 青青草国产精品欧美成人| 大胸女大学生| 国产成人一区二区在线不卡 | 亚洲视频免费看| 极品丝袜乱系列在线阅读| 80yy私人午夜a级国产| 日本欧美大码aⅴ在线播放| 亚洲成a人片在线观看中文| 巨粗黑吊| 免费v片| 欧美性猛交xxxx乱大交丰满| 真正全免费视频a毛片| 一嫁三夫电影免费观看| 国产va免费精品高清在线观看| 美女裸体a级毛片| 快穿之肉玩具系统| 菠萝蜜视频在线观看入口 | 处破之轻点好疼十八分钟| 一边摸一边爽一边叫床视频| 男女做爽爽免费视频| 色戒7分27秒大尺度在线| 免费人成在线观看视频播放| 欧美日产国产亚洲综合图区一| 亚洲乱码一二三四区国产| 免费做暖1000视频日本| 全彩口工| 啊哈~在加了一根手指| 日本三黄色大| 男人j进入女人j内部免费网站| 大学生一级毛片高清版| 中文字幕在线最新在线不卡| 亚洲国产精品久久网午夜| 夫妇交换性3中文字幕k8| 三上悠亚在线电影| 海角社区视频在线| 国产男女无遮挡猛进猛出|