国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

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

            千鋒教育

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

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

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

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

            ?python命名空間與作用域

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

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

            命名空間不共享名稱。

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

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

            L:局部的(local)

            E:封閉的(Enclosing)

            G:全局的(Global)

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

            一、局部命名空間

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

            二、全局命名空間

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

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

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

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

            python中有一種稱為“本地賦值”的規(guī)則非常有趣。如果在函數(shù)內(nèi)的任何地方進(jìn)行局部賦值,則該賦值只在當(dāng)前活動(dòng)的命名空間中創(chuàng)建名稱。有時(shí)這將產(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

            >>>

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

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

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

            2.global語(yǔ)句

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

            三、內(nèi)置模塊

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

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

            四、封閉式變量

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

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

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(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
            Python標(biāo)準(zhǔn)庫(kù)主要有哪些功能?

            眾所周知,Python標(biāo)準(zhǔn)庫(kù)非常龐大,可以幫助處理各種各樣的工作,從而提高效率、節(jié)省成本。那么你對(duì)Python標(biāo)準(zhǔn)庫(kù)了解多少呢?你知道Python標(biāo)準(zhǔn)庫(kù)...詳情>>

            2023-11-05 23:38:38
            用Python編寫代碼時(shí)有哪些有用的技巧?

            不知道吧,使用Python編寫代碼時(shí),有一些小技巧可以大幅度提升我們的工作效率和開發(fā)效率,而且這些技巧很簡(jiǎn)單,只需要在編寫代碼時(shí)稍微注意一下...詳情>>

            2023-11-05 22:48:14
            python基礎(chǔ)入門之設(shè)計(jì)URL方案

            DjangoURL分發(fā)系統(tǒng)使用了正則表達(dá)式配置模塊,它可以將URL字符串模式映射為Python方法views。這個(gè)系統(tǒng)允許URL與底層代碼完全脫節(jié),從而實(shí)現(xiàn)最大...詳情>>

            2023-11-05 22:37:26
            Python的編程語(yǔ)言

            一、Python編程語(yǔ)言的優(yōu)點(diǎn)有哪些?1.Python是一種腳本語(yǔ)言,寫好了就可以直接運(yùn)行,省去了編譯鏈接的麻煩,對(duì)于需要多動(dòng)手實(shí)踐的初學(xué)者而言,也...詳情>>

            2023-11-05 22:33:50
            python五大異常處理機(jī)制

            ??我們明白了什么是異常后,那么發(fā)現(xiàn)異常后怎么處理,便是我們接下來(lái)要解決的問題。這里將處理異常的方式總結(jié)為五種。1、默認(rèn)異常處理機(jī)制“...詳情>>

            2023-11-05 22:15:50