我和Python的Py交易》》》》》》 命名空間的小弟範圍

來源:互聯網
上載者:User

標籤:交易   範圍   strong   enc   bytearray   對象   關鍵字   global   uil   

 命名空間的小弟範圍

在這要明確一個觀點,在Python中萬物皆對象,而變數指向的就是對象。

變數可以是 類名,函數名,儲存資料的變數……

對象可以是  類 ,被封裝的一段代碼(函數),資料……

命名空間

命名空間是從名字到對象的映射。在Python大多數命名空間目前以字典的形式實現。變數名是“鍵”,對象(內建函數,內建常量,內建類型,函數,類,變數)是“值”。

各個命名空間是獨立的,沒有任何關係的,所以一個命名空間中不能有重名,但不同的命名空間是可以重名而沒有任何影響。

命名空間都是有建立時間和生存期的。對於Python built-in namespace(內建命名空間——內建函數,內建常量,內建類型)組成的命名空間,它在Python解譯器啟動的時候被建立,在解譯器退出的時候才被刪除;

對於一個Python 模組的global namespace(全域變數),它在這個模組被 引用的時候建立,在解譯器退出的時候退出;

對於一個函數的local namespace(局部範圍),它在函數每次被調用的時候建立,函數返回的時候被刪除。

範圍

範圍只是命名空間表示大小(適用範圍)的屬性。

範圍是Python程式(文本)的某一段或某些段,在這些地方,某個命名空間中的名字可以被直接引用。這個範圍就是這個命名空間的範圍。

python中的範圍分4種情況:

  • L:local,局部範圍,即函數中定義的變數;
  • E:enclosing,嵌套的父級函數的局部範圍,即包含此函數的上級函數的局部範圍,但不是全域的;
  • G:globa,全域變數,就是模組層級別定義的變數;
  • B:built-in,系統固定模組裡面的變數,比如int, bytearray等
搜尋變數的優先順序順序

局部範圍>外層範圍>當前模組中的全域>python內建範圍,也就是L>E>G>B。

B = str("B:built-in 內建範圍")G = "G:globa,全域變數,就是模組層級別定義的變數"print(B) # 當前模組中的全域>python內建範圍 找Bprint(G) # 當前模組中的全域 找Gprint(E) # 找不到Eprint(L) # 找不到Ldef f():    E = "E:enclosing,嵌套的父級函數的局部範圍"    print(B) # 外層範圍>當前模組中的全域>python內建範圍 找B    print(G) # 外層範圍>當前模組中的全域 找G    print(E) # 外層範圍 找E    print(L) # 找不到L    def z ():        L = "L:local,局部範圍,即函數中定義的變數"        print(B) # 範圍局部>外層範圍>當前模組中的全域>python內建範圍 找B        print(G) # 範圍局部>外層範圍>當前模組中的全域 找G        print(E) # 範圍局部>外層範圍 找E        print(L) # 範圍局部 找L

注意:在Python中,只有模組(module),類(class)以及函數(def、lambda)才會引入新的範圍,其它的代碼塊(如if、try、for等)是不會引入新的範圍的

變數的修改

在“範圍局部>外層範圍>當前模組中的全域>python內建範圍”中,更內層的範圍不可直接修改外層的範圍的變數,要修改要用到global關鍵字 nonlocal關鍵字

global關鍵字 

當修改的變數是在全域範圍(global範圍)上的,就要使用global先聲明一下。

nonlocal關鍵字 

global關鍵字聲明的變數必須在全域範圍上,不能嵌套範圍上,當要修改嵌套範圍(enclosing範圍,外層非全域範圍)就需要nonlocal關鍵字了

B = str("B:built-in 內建範圍")G = "G:globa,全域變數,就是模組層級別定義的變數"def f():    E = "E:enclosing,嵌套的父級函數的局部範圍"    def z ():        L = "L:local,局部範圍,即函數中定義的變數"        global B        B = "修改全域範圍的變數"        nonlocal E        E = "修改嵌套範圍的變數"

歡迎評論,番茄,雞蛋都砸過來吧!!!

我和Python的Py交易》》》》》》 命名空間的小弟範圍

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.