黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質(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ā)布人:wjy
時間: 2022-09-13 17:42:30 1663062150

  命名空間

  一個程序具有多個變量,為了更好的組織這些變量,更好的控制變量之間的命名沖突以及更好的管理變量在程序中的角色,python使用了命名空間這樣一種結(jié)構(gòu)來實現(xiàn)這個目的。python中,一個命名空間由多個變量組成,且以字典的形式來保存這些變量,其中key是變量名稱,value是變量名對應(yīng)的對象。

  同一個命名空間中的變量名是唯一的,不同命名空間中的變量相互獨立(這里的相互獨立指的是不會相互沖突相互覆蓋,但是可能會有相同的對象引用(即指向同一個內(nèi)存中的對象))。既然命名空間是為了更好的控制變量之間的命名沖突以及更好的管理變量在程序中的角色,那么什么情況下把兩個變量放入同一個命名空間,即以什么樣的邏輯和規(guī)則定義變量的命名空間就是最基本的問題。

  python中約定了四種命名空間:內(nèi)置的(Bulit-in)、全局的(Global)、外層函數(shù)的(Enclosing or Nonlocal)以及本地的(Local)。

Python 中的作用域

  這四種命名空間的定義規(guī)則和邏輯如下:

  內(nèi)置的(Bulit-in):python定義的所有的內(nèi)置變量,比如abs、max這些內(nèi)置函數(shù)以及預(yù)定義的異常等,這些變量都放在內(nèi)置命名空間中,可以通過python的標(biāo)準(zhǔn)模塊builtins獲取所有的內(nèi)置變量。

  全局的(Global):在模塊(腳本)頂層定義的所有變量,python把這些變量會放在該模塊的全局命名空間中,可以通過globals()獲取當(dāng)前位置已經(jīng)定義了的所有全局變量。

  本地的(Local):python中函數(shù)的每次調(diào)用會新創(chuàng)建一個自己的命名空間,這個命名空間包含的變量為函數(shù)參數(shù)和函數(shù)中定義的所有變量,這些變量也成為該函數(shù)的本地變量。

  外層函數(shù)的(Enclosing or Nonlocal):如果函數(shù)A中嵌套了一個函數(shù)B,那么對于內(nèi)層函數(shù)B來說,外層函數(shù)A的本地命名空間就是B的外層函數(shù)命名空間。單純從命名空間的角度看,似乎外層函數(shù)命名空間和本地命名空間重復(fù)定義了,因為其本身就是外層函數(shù)的本地命名空間。但從作用域和變量查找的角度看,并不會重復(fù)定義;實際上,在python2.2之前,這層命名空間是不存在的,2.2版本的python才加入了這層命名空間,加入后,使得函數(shù)B直接引用函數(shù)A的本地變量變?yōu)榭赡?因此,對于這種嵌套函數(shù)形式下的外層函數(shù)命名空間,python給了其一個單獨的定義。

  作用域和LEGB變量查找規(guī)則

  定義好命名空間之后,我們知道具有同一個名稱的不同變量可能同時存在于多個不同的命名空間中,那么問題來了:當(dāng)我們引用一個變量x,x同時存在于多個命名空間中,python如何知道我們引用的是哪一個?python對此引入了作用域和變量查找規(guī)則來消除這種歧義性。

  域( scope)指的就是程序的文本區(qū)域。python中的域指的就是變量的作用域,某個變量的作用域指的是這樣一個區(qū)域在這個區(qū)域中,python可以直接獲取到該變量,直接獲取的意思是可以直接在該變量的命名空間中找到該變量,而不是通過屬性訪問等其他方式獲取。 所以通過明確變量的作用域可以讓我們知道某個變量在程序的哪些地方起作用(可以被直接獲取),同時約定了變量作用域還可以消除部分的歧義性,因為對于某個變量并不起作用的區(qū)域,我們自然就不需要在該區(qū)域考慮該變量。

  對于上述四種不同命名空間里的變量,其各自有自己的作用域,分別如下:

  全局(變量)作用域:指的就是全局變量的作用域,也就是整個模塊文件;

  內(nèi)置(變量)作用域:指的就是內(nèi)置變量的作用域,包括整個解釋器環(huán)境;

  外層函數(shù)(變量)作用域:也指非本地作用域,指的就是外層函數(shù)中變量的作用域,包括整個外層函數(shù)下的代碼塊,同時也是外層函數(shù)的本地作用域;

  本地(變量)作用域:就是一個函數(shù)下定義的本地變量的作用域,為函數(shù)下的代碼塊區(qū)域。

  明確上述四種變量的各自作用域后,依然存在歧義性,因為不同命名空間中的相同名稱的變量的作用域可能存在重復(fù),比如有一個全局變量x,在一個函數(shù)中又定義了一個本地變量x,那么該函數(shù)中的代碼塊即是全局變量x的作用域,也是本地變量x的作用域。針對這種情況,python中規(guī)定了變量在不同命名空間中的查找順序,依次為:本地命名空間(L)、外層函數(shù)命名空間(E or N)、全局命名空間(G)以及內(nèi)置命名空間(B),這稱為python變量查找的LEGB(LNGB)規(guī)則。如此,即使不同命名空間中存在相同名稱的變量且作用域重復(fù),根據(jù)該規(guī)則,就可以確定python查找的變量對應(yīng)的值到底是哪一個,從而可以消除變量名的歧義性。

  需要注意的是,LEGB(LNGB)規(guī)則是python將源碼編譯成字節(jié)碼時的變量作用域解析規(guī)則,所以實際上,變量的命名空間在編譯時就被靜態(tài)確定了,從而在解釋器執(zhí)行編譯后的字節(jié)碼時,python會直接在變量對應(yīng)的命名空間中去獲取該對象。

  最后強(qiáng)調(diào)一下外層函數(shù)命名空間和作用域,該命名空間是在python2.2版本加入的,在2.2之前的版本,如下代碼如無法運(yùn)行成功,因為對于inner函數(shù)中的x,python只會在本地命名空間、全局命名空間和內(nèi)置命名空間中查找,outer函數(shù)的命名空間會被直接跳過,因此下面的代碼會因為找不到x而報錯。2.2之前的版本為了使用outer函數(shù)的x,一般需要把x作為參數(shù)傳給inner。但是在2.2版本開始,加入了Enclsoing function概念,也就是outer函數(shù),該函數(shù)的命名空間為外層函數(shù)命名空間,其變量的作用域包含了inner函數(shù)的代碼塊,因此python在查找x變量時,也會查找該外層函數(shù)的命名空間。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(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
軟件定制開發(fā)中的敏捷開發(fā)是什么?

軟件定制開發(fā)中的敏捷開發(fā)是什么軟件定制開發(fā)中的敏捷開發(fā),從宏觀上看,是一個高度關(guān)注人員交互,持續(xù)開發(fā)與交付,接受需求變更并適應(yīng)環(huán)境變化...詳情>>

2023-10-14 13:24:57
什么是PlatformIo?

PlatformIO是什么PlatformIO是一個全面的物聯(lián)網(wǎng)開發(fā)平臺,它為眾多硬件平臺和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡化了開發(fā)過程,并能兼容各種...詳情>>

2023-10-14 12:55:06
云快照與自動備份有什么區(qū)別?

1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時間點后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動備份的主要目標(biāo)...詳情>>

2023-10-14 12:48:59
服務(wù)器為什么要用Linux?

服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨特的優(yōu)勢和特點。包括其...詳情>>

2023-10-14 12:34:11
ORM解決的主要問題是什么?

ORM(對象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲,而在面向?qū)ο?..詳情>>

2023-10-14 12:26:19
快速通道
国产高清视频免费观看| 你懂的在线观看视频| 精品视频在线观看一区二区三区| 日韩男人天堂| 成人a大片高清在线观看| 国产伦久视频免费观看视频| 欧美大片aaaa一级毛片| 国产一区二区精品| 999久久66久6只有精品| 亚洲精品影院| 可以在线看黄的网站| 精品视频在线观看一区二区三区| 国产成人精品综合久久久| 久久国产一久久高清| 91麻豆精品国产高清在线| 精品视频在线观看视频免费视频 | 999久久狠狠免费精品| 九九久久国产精品| 国产不卡在线看| 欧美另类videosbestsex| 欧美日本免费| 欧美激情影院| 青青久久精品| 四虎影视精品永久免费网站| 麻豆网站在线看| 免费一级片网站| 成人高清免费| 精品久久久久久免费影院| 日韩在线观看免费| 你懂的在线观看视频| 四虎影视库| 天天做日日爱夜夜爽| 国产91精品一区| 精品毛片视频| 精品国产一区二区三区久| 美国一区二区三区| 精品国产亚洲人成在线| 成人免费观看网欧美片| 欧美a级成人淫片免费看| 沈樵在线观看福利| 欧美激情一区二区三区视频 | 色综合久久天天综合观看| 久久精品道一区二区三区| 欧美a免费| 天天做日日爱| 免费国产在线视频| 人人干人人插| 亚洲女初尝黑人巨高清在线观看| 精品视频在线观看免费 | 九九国产| 色综合久久手机在线| 色综合久久天天综合绕观看| 一本高清在线| 一级女性大黄生活片免费| 欧美日本免费| 国产91视频网| 美国一区二区三区| 国产精品自拍在线| 精品国产一级毛片| 四虎久久影院| 日本在线不卡视频| 天天做人人爱夜夜爽2020毛片| 成人免费网站久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 成人在免费观看视频国产| 天天做人人爱夜夜爽2020毛片| 久草免费在线视频| 韩国三级视频在线观看| 欧美一区二区三区在线观看| 精品国产香蕉伊思人在线又爽又黄| 日韩在线观看网站| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品美女| 午夜精品国产自在现线拍| 午夜欧美福利| 日韩av成人| 青青青草视频在线观看| 国产成人啪精品视频免费软件| 日韩专区亚洲综合久久| 精品在线观看国产| 欧美一区二区三区在线观看| 超级乱淫伦动漫| 日韩免费片| 国产视频网站在线观看| 成人免费网站视频ww| 韩国毛片 免费| 中文字幕一区二区三区精彩视频| 九九干| 精品国产亚一区二区三区| 成人av在线播放| 一本伊大人香蕉高清在线观看| 国产伦理精品| 亚欧视频在线| 免费国产在线视频| 欧美电影免费看大全| 久久国产影院| 国产高清视频免费观看| 国产一区二区精品尤物| 一级女性全黄久久生活片| 精品国产三级a| 日本乱中文字幕系列| 黄色福利片| 日韩av东京社区男人的天堂| 久久99青青久久99久久| 一a一级片| 欧美激情伊人| 在线观看导航| 国产欧美精品午夜在线播放| 久久国产影院| 精品国产一区二区三区免费| 91麻豆精品国产自产在线观看一区 | 国产综合91天堂亚洲国产| 精品国产香蕉伊思人在线又爽又黄| 青草国产在线观看| 欧美α片无限看在线观看免费| 日日爽天天| 91麻豆精品国产自产在线 | 国产原创视频在线| 亚洲女初尝黑人巨高清在线观看| 亚洲wwwwww| 日韩在线观看视频免费| 国产不卡高清| 国产视频一区二区在线观看| a级黄色毛片免费播放视频| 国产成人女人在线视频观看| 夜夜操网| 欧美激情一区二区三区视频 | 欧美大片aaaa一级毛片| 午夜精品国产自在现线拍| 免费一级片在线| 欧美国产日韩在线| 尤物视频网站在线| 成人在免费观看视频国产| 日韩中文字幕在线观看视频| 九九免费高清在线观看视频| 国产成a人片在线观看视频| 九九久久国产精品大片| 人人干人人插| 成人免费网站视频ww| 色综合久久久久综合体桃花网| 人人干人人插| 99色吧| 国产成人啪精品视频免费软件| 日本特黄一级| 久久国产一区二区| 一本高清在线| 青草国产在线观看| 色综合久久久久综合体桃花网| 日本特黄特色aaa大片免费| 99色视频| 欧美一级视| 欧美大片aaaa一级毛片| 黄视频网站在线观看| 91麻豆精品国产自产在线| 国产成a人片在线观看视频| 国产欧美精品| 日本免费看视频| 台湾美女古装一级毛片| 麻豆系列 在线视频| 韩国三级一区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美a级片视频| 精品久久久久久中文字幕2017| 韩国三级视频在线观看| 久久国产一区二区| 亚洲wwwwww| 国产不卡在线观看| 欧美另类videosbestsex高清| 亚洲天堂在线播放| 国产极品白嫩美女在线观看看| 久久精品欧美一区二区| 91麻豆精品国产自产在线 | 色综合久久天天综合观看| 欧美激情一区二区三区视频 | 国产韩国精品一区二区三区| 91麻豆精品国产自产在线| 麻豆污视频| 国产欧美精品午夜在线播放| 精品国产三级a| 亚洲女人国产香蕉久久精品| 天堂网中文在线| 国产亚洲精品成人a在线| 黄视频网站免费看| 久久久久久久男人的天堂| 天天做人人爱夜夜爽2020毛片| 成人免费高清视频| 日韩欧美一二三区| 在线观看成人网| 欧美国产日韩精品| 欧美激情一区二区三区在线| 精品久久久久久免费影院| 天天色成人网| 久久精品免视看国产明星| 韩国三级视频在线观看| 国产视频久久久久| 久久精品免视看国产明星 | 青青久久精品| 九九精品在线播放| 国产一区二区精品久久91| 99热视热频这里只有精品|