日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 命名空间冲突_python-命名空间

發布時間:2025/3/8 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 命名空间冲突_python-命名空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通俗的來說,Python中所謂的命名空間可以理解為一個容器。在這個容器中可以裝許多標識符。不同容器中的同名的標識符是不會相互沖突的。理解python的命名空間需要掌握三條規則:

第一,賦值(包括顯式賦值和隱式賦值)產生標識符,賦值的地點決定標識符所處的命名空間。

第二,函數定義(包括def和lambda)產生新的命名空間。

第三,python搜索一個標識符的順序是"LEGB"。

所謂的"LEGB"是python中四層命名空間的英文名字首字母的縮寫。

最里面的一層是L(local),表示在一個函數定義中,而且在這個函數里面沒有再包含函數的定義。

第二層E(enclosing function),表示在一個函數定義中,但這個函數里面還包含有函數的定義,其實L層和E層只是相對的。

第三層G(global),是指一個模塊的命名空間,也就是說在一個.py文件中定義的標識符,但不在一個函數中。

第四層B(builtin),是指python解釋器啟動時就已經具有的命名空間,之所以叫builtin是因為在python解釋器啟動時會自動載入__builtin__模塊,這個模塊中的list、str等內置函數的就處于B層的命名空間中。

這三條規則通過一個例子來看比較明白。如下面例子所示:

來詳細看看這段代碼中的標識符。第1行,適用第一條規則“賦值產生標識符”,因此產生一個標識符g。“賦值的地點決定標識符所處的命名空間”,因為g是沒有在一個函數定義中,因此g處于'G'層命名空間中。這一行中還有一個標識符,那就是int。那么int是在什么地方定義的呢?由于int是內置函數,是在__builtin__模塊中定義的,所以int就處于'B'的層命名空間中。第2行,適用第一條規則,由于def中包含一個隱性的賦值過程,這一行產生一個標識符outFunc,outFunc并不處于一個函數定義的內部,因此,outFunc處于'G'層命名空間中。此外,這一行還適用第二條規則,產生一個新的命名空間。第3行,適用第一條規則,產生個標識符e,而且由于這是在一個函數定義內,并且內部還有函數定義,因此e處于'E'層命名空間中。第4行要注意,適用第一條規則,產生一個標識符g,這個g與e一樣外于'E'層命名空間中。這個g與第一行的g是不同的,因為所處的命名空間不一樣。第5行,適用第一條規則,產生一個處于'E'層命名空間的標識符inFunc。與第2行一樣,這一行定義函數也產生一個新的命名空間。

第6行,適用第一條規則,產生一個標識符l,由于這個l處于一個函數內部,而且在這個函數內部沒有其他函數的定義,因此l處于'L'層命名空間中。

第7行,適用第三條規則,python解釋器首先看到標識符g,按照LEGB的順序往上找,先找L層(也就是在inFunc內部),沒有。再找E層,有,值為10。因此這里的g的值為10。尋找過程到為止,并不會再往上找到'G'層。尋找e的過程也一樣,e的值為2。因此第9行的結果為12。

其實,所謂的“LEGB”是為了學術上便于表述而創造的。讓一個編程的人說出哪個標識符處于哪個層沒有什么意義,只要知道對于一個標識符,python是怎么尋找它的值的就可以了。其實找值的過程直觀上也很容易理解。

通過上面的例子也可以看出,如果在不同的命名空間中定義了相同的標識符是沒有關系的,并不會產生沖突。尋找一個標識符的值過程總是從當前層開始往上找的,首先找到的就為這個標識符的值。也由此可以這么說,'B'層標識符在所有模塊(.py文件)中可用;'G'層標識符在當前模塊內(.py文件)中可用;'E'和'L'層標識符在當前函數內可用。

可以看到,雖然有兩個層中的g,但使用了global語句后,就是指'G'層的標識符。也就是第7行中的g,就是指第1行產生的那個g,值為'global'。

最后說一句,其實只要在編程的時候注意一下,不要使用相同的標識符,基本上就可以避免任何與命名空間相關的問題。還有就是在一個函數中盡量不要使用上層命名空間中的標識符,如果一定要用,也最好使用參數傳遞的方式進行,這樣有利于保持函數的獨立性。

總結

以上是生活随笔為你收集整理的python 命名空间冲突_python-命名空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美激情视频在线观看 | 亚洲色在线视频 | 午夜成人在线视频 | 污视频在线免费观看 | 樱花视频在线观看 | 国精产品一区一区三区有限公司杨 | 国模福利视频 | 精品久久二区 | 成年人免费小视频 | 国产又粗又长又硬免费视频 | 欧美做受高潮 | 欧美成人精品欧美一级乱 | 欧美透逼视频 | 久久精品夜 | 亚洲一区在线视频 | 色射射 | 三级大片在线观看 | 免费高清视频在线观看 | 3d动漫啪啪精品一区二区中文字幕 | 天堂婷婷 | 久草福利视频 | 国产一区二区激情 | 又色又爽又黄18网站 | 国产chinasex麻豆videos | 琪琪原网址 | 97精品视频在线 | 国产成人无码精品 | 伊人免费在线观看高清版 | 国产乱人伦app精品久久 | 欧美综合在线一区 | 国产福利片在线观看 | 成人精品在线观看视频 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 黑人巨大精品欧美 | av无毛| 久久久久久穴 | 影音先锋制服 | 蜜臀av一区二区 | 山外人精品影院 | 黄色自拍视频 | 美女午夜影院 | 日日骚av| 成人毛片在线观看 | 性做久久久久久免费观看欧美 | 国产成人精品一区二区色戒 | 天天看a | av伦理在线 | 全黄一级男人和女人 | 亚洲人体视频 | 国产精品黄色大片 | 老熟妇一区二区三区啪啪 | 91九色视频 | 精品九九 | 国产精品久久久久久久久久久新郎 | 欧美另类极品videosbest最新版本 | 日本久久一区 | 一级国产黄色片 | 成人免费在线网址 | 免费欧美一级片 | 亚洲精品视频在线免费 | 国产精品久久久久精 | 公肉吊粗大爽色翁浪妇视频 | 国产在线精品一区 | 免费20分钟超爽视频 | 可以免费看的毛片 | 99色影院 | 精品人妻一区二区三区免费看 | 69免费| 欧美日韩高清一区二区 国产亚洲免费看 | 天堂网中文在线 | 综合xx网 | a级小视频| 午夜电影天堂 | 欧美深性狂猛ⅹxxx深喉 | 免费成人美女女电影 | 日韩免费福利视频 | 成av人片一区二区三区久久 | 91精品人妻一区二区 | 国产又爽又黄的视频 | 成人av电影在线播放 | 西西午夜视频 | 一区二区三区日 | 在线观看亚洲色图 | 欧美成人做爰大片免费看黄石 | 男生操女生屁股 | 国产综合色视频 | 亚洲精品少妇久久久久久 | 天天干干| gv天堂gv无码男同在线观看 | 欧美xxxx黑人| 亚洲黄色影视 | 中文字幕网伦射乱中文 | 久久成人福利视频 | 国产成人麻豆精品午夜在线 | 亚洲国产剧情在线观看 | 亚洲成人三级 | 一级全黄色片 | 一起草av在线 | 欧美国产乱视频 |