91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中的LEGB規則

發布時間:2020-08-05 07:48:58 來源:ITPUB博客 閱讀:213 作者:python交流 欄目:編程語言
前言

理解LEGB前,首先需要對Python的作用域、命名空間有一定的了解,話題才能繼續展開。

命名空間

命名空間表示變量的可見范圍,一個變量名可以定義在多個不同的命名空間,相互之間并不沖突,但同一個命名空間中不能有兩個相同的變量名。比如:兩個叫“張三”的學生可以同時存在于班級A和班級B中,如果兩個張三都是一個班級,那么帶來的麻煩復雜很多了,在Python中你不能這么干。

在Python中用字典來表示一個命名空間,命名空間中保存了變量(名字)和對象的映射關系,在Python中命名空間出現在哪些地方呢?有函數范圍內的命名空間(local),有模塊范圍內的命名空間(global),有python內建的命名空間(built-in),還有類對象的所有屬性組成的命名空間。

命名空間的生命周期

所有的命名空間都是有生命周期的,對于python內建的命名空間,python解析器啟動時創建,一直保留直至直python解析器退出時才消亡。而對于函數的local命名空間是在函數每次被調用的時候創建,調用完成函數返回時消亡,而對于模塊的global命名空間是在該模塊被import的時候創建,解析器退出時消亡。

作用域

一個作用域是指一段程序的正文區域,可以是一個函數或一段代碼。一個變量的作用域是指該變量的有效范圍。Python的作用域是靜態作用域,因為它是由代碼中得位置決定的,而命名空間就是作用域的動態表現。

LGB

Python2.2之前定義了三個作用域,分別是:

global作用域,對應的global命名空間,一個模塊最外層定義的一個作用域。
local作用域,對應local命名空間,由函數定義的。
builtin作用域,對應builtin命名空間,python內部定義的最頂層的作用域,在這個作用域里面定義了各種內建函數:open、range、xrange、list等等。
那時的Python作用域規則叫做LEB規則,變量(名字)的引用按照local作用域、global作用域、builtin作用域的順序來查找。

首先來看一段代碼:

a = 1
 def foo():
    a = 2
    print a   //[1] 
print a       //[2]
 
foo()

[1]處輸出結果為2,Python首先會在函數foo定義的local作用域中查找名字a,如果找到了直接輸出,沒有沒找到就會在模塊定義的global作用域中查找,如果還沒找到,就到Python內建的builtin作用域中查找a,如果還沒找到就報異常:NameError: name ‘a’ is not defined。

[2]處輸出結果為1,查找順序同樣是按照LGB規則,只不過這里的local作用域就是global作用域。

LEGB規則

Python2.2開始引入嵌套函數,嵌套函數為python提供了閉包實現。

a = 1def foo():
   a = 2
   def bar():
        print a  //[1]    return bar
 
func = foo()
func()

函數bar和a=2捆包在一起組成一個閉包,因此這里a=2即使脫離了foo所在的local作用域,但調用func的時候(其實就是調用bar)查找名字a的順序是LEGB規則,這里的E就是enclosing的縮寫,代表的“直接外圍作用域”這個概念。查找a時,在bar對應的local作用域中沒有時,然后在它外圍的作用域中查找a。LEGB規定了查找一個名稱的順序為:local–>enclosing–>global–>builtin。


Python中的LEGB規則

原文來自:開源中國 侵刪


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平定县| 汨罗市| 渭源县| 孝义市| 宝坻区| 敦煌市| 赤峰市| 景东| 三台县| 铜山县| 四川省| 曲沃县| 焦作市| 武定县| 武安市| 东山县| 鱼台县| 灵石县| 长海县| 齐齐哈尔市| 丹寨县| 绥阳县| 东乡族自治县| 象州县| 江口县| 衡山县| 神农架林区| 汕头市| 巴东县| 阿城市| 丹凤县| 来宾市| 南通市| 平安县| 福建省| 北京市| 莱州市| 山东省| 江口县| 阿拉尔市| 虞城县|