在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解python常規包與命名空間包

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-11 15:46 ? 次閱讀

python常規包與命名空間包

1. 常規包

在 Python 3.3 之前或者說 Python 2 中,一個包想要被導入使用,那么該包內必須要有 __init__.py 文件,這個文件是 Python 識別一個文件夾是否是一個 Python 的重要標志。

舉個例子,現在有如下的目錄樹,demo 及子文件夾 foo 和 bar 下都有 __init__.py 文件。

$ tree demo/
demo/
├── bar
│ └── __init__.py
├── foo
│ └── __init__.py
└── __init__.py

在該目錄下進入 Python Console 模式,然后就可以正常導入了

>>> import demo
>>> import demo.bar
>>> import demo.foo

如果此時我把 demo 目錄下的 __init__.py 刪除

$ tree demo/
demo/
├── bar
│ └── __init__.py
└── foo
    └── __init__.py

再導入就會報錯。

>>> import demo
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named demo

2. 命名空間包

在 Python 3.3 之后(PEP 420),即使一個文件夾中沒有定義 __init__.py,也是可以被導入的,只不過它不是以 Python 包的形式導入,而是以命名空間包 (Namespace package) 的形式被導入,而這一特性是在 Python 3.3 被引入的。

比如還是上面的目錄結構:

$ tree demo/
demo/
├── bar
│ └── __init__.py
└── foo
    └── __init__.py

在 Python 3 下進入 Python Console 模式,發現導入是正常的

>>> import demo
>>> import demo.foo
>>> import demo.bar

使用 __path__ 查看一下,發現 demo 不再是一個常規包了,而是一個 namespace package

>>> demo

>>>
>>> demo.__path__
_NamespacePath(['/root/python/demo'])

3. 空間命名包的好處

利用命名空間包這個技術,可以用來導入目錄分散的代碼。

比如有如下的目錄樹

$ tree
.
├── xc-pkg
│ └── demo
│     └── foo
│         └── __init__.py
└── xm-pkg
    └── demo
        └── bar
            └── __init__.py

在這 xc-pkgxm-pkg 這兩個目錄里,都有著共同的命名空間 demo。這時候再導入這兩個包的時候,發現這兩個包被合并到一起了

>>> import sys
>>> sys.path.extend(['xm-pkg', 'xc-pkg'])
>>>
>>> import demo.foo
>>> import demo.bar
>>> demo

在這里工作的機制被稱為命名空間包的一個特征。從本質上講,命名空間包是一種特殊的封裝設計,為合并不同的目錄的代碼到一個共同的命名空間。

命名空間包的關鍵是確保頂級目錄中沒有 __init__.py 文件來作為共同的命名空間。缺失 __init__.py 文件使得在導入包的時候會發生有趣的事情:這并沒有產生錯誤,解釋器創建了一個由所有包含匹配包名的目錄組成的列表。特殊的包命名空間模塊被創建,只讀的目錄列表副本被存儲在其 __path__ 變量中。

>>> demo.__path__
_NamespacePath(['xm-pkg/demo', 'xc-pkg/demo'])

一個包是否被作為一個包命名空間的主要方法是檢查其 __file__ 屬性。如果沒有,那包是個命名空間。這也可以由其字符表現形式中的 namespace 這個詞體現出來。

>>> demo

>>>
>>> demo.__file__
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: module 'demo' has no attribute '__file__'

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 結構
    +關注

    關注

    1

    文章

    117

    瀏覽量

    21908
  • 空間
    +關注

    關注

    2

    文章

    50

    瀏覽量

    13826
  • python
    +關注

    關注

    56

    文章

    4825

    瀏覽量

    86258
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    藍牙數據通道空口(數據

    ? 與藍牙廣播相對應,藍牙數據是另一種Bluetooth LE packet。藍牙數據是藍牙數據信道空中的簡稱,表示空中只在藍牙數
    發表于 06-03 10:51

    藍牙廣播

    ?藍牙廣播,全名藍牙廣播通道(channel)空中,即在藍牙廣播通道上傳輸的空中,為兩種空中的一種,其具體格式如下所示: ? 編輯 Advertising Header即前述的
    發表于 06-03 10:47

    Bluetooth LE Link Layer數據全解析

    ,因此文章取名“詳解Bluetooth LE空口格式—兼Bluetooth LE link layer協議解析”
    發表于 06-03 10:28

    如何將Linux安裝快速轉成玲瓏

    本篇將以 motrix 為例為大家展示如何將 Linux 安裝快速轉成玲瓏
    的頭像 發表于 03-12 16:01 ?423次閱讀
    如何將Linux安裝<b class='flag-5'>包</b>快速轉成玲瓏<b class='flag-5'>包</b>

    移動電源鼓怎么回事及處理方法

    移動電源(充電寶)鼓是一個值得關注的安全問題,其鼓的原因主要包括以下幾點:
    的頭像 發表于 01-27 15:41 ?4507次閱讀

    I2C總線數據結構詳解

    。以下是I2C總線數據結構的詳解: 一、I2C總線數據的基本組成 I2C總線上的數據傳輸以數據為單位進行,每個數據包包含起始信號、設備地址、數據傳輸方向位、數據字節以及應答信號(
    的頭像 發表于 01-17 15:46 ?685次閱讀

    華納云如何解讀WinMTR的丟率數據?

    WinMTR顯示的丟率數據是指在網絡路徑上,從你的計算機到目標主機之間,數據丟失的百分比。丟率是網絡穩定性的一個重要指標,它可以幫助識別網絡中的問題點,如路由器故障、網絡擁塞或配置錯誤。以下
    的頭像 發表于 12-30 16:51 ?475次閱讀

    mtu配置步驟詳解 mtu與數據丟失的關系

    MTU(Maximum Transmission Unit)即最大傳輸單元,是指一種通信協議的某一層上面所能通過的最大數據報大小,單位是字節。MTU配置步驟及其與數據丟失的關系如下: MTU配置
    的頭像 發表于 12-16 14:33 ?2327次閱讀

    Linux網卡收流程

    Linux 網卡收流程如下 網卡收到數據 將數據從網卡硬件緩存移動到服務器內存中(DMA方式,不經過CPU) 通過硬中斷通知CPU處理 CPU通過軟中斷通知內核處理 經過TCP/IP協議棧處理
    的頭像 發表于 12-05 16:21 ?726次閱讀
    Linux網卡收<b class='flag-5'>包</b>流程

    CentOS中使用tcpdump抓

    CentOS中使用tcpdump抓
    的頭像 發表于 10-28 14:48 ?659次閱讀

    什么是膜壓方線?

    而成,工藝過程中新增加了壓方工序,使得各股線間隙更小,整線密度更高。 相比于常規線,膜壓方線在相同股數下線徑可減小50%,可以有效減小磁性元件繞組的體積,為新能源汽車節省更多空間
    的頭像 發表于 10-16 11:33 ?651次閱讀
    什么是膜<b class='flag-5'>包</b>壓方線?

    使用Python進行Ping測試

    )請求,然后等待目標主機返回響應,從而測量網絡的延遲和丟情況。隨著Python編程語言的廣泛應用,越來越多的網絡工程師開始使用Python
    的頭像 發表于 08-12 17:56 ?928次閱讀
    使用<b class='flag-5'>Python</b>進行Ping測試

    經典藍牙抓解析說明

    在無線通信協議的開發過程中,抓器是工程師們不可或缺的工具。掌握抓器的使用,就如同擁有了能夠洞察無線電波的“火眼金睛”。這不僅使我們能夠驗證發出的數據是否準確,檢查流程或時序的合理性,還能幫助
    的頭像 發表于 07-24 09:04 ?3108次閱讀
    經典藍牙抓<b class='flag-5'>包</b>解析說明

    notepad++安裝的壓縮

    本壓縮文件為notepad++的壓縮安裝,可以直接解壓之后使用
    發表于 07-01 15:07 ?7次下載

    安裝依賴的Python軟件時報錯如何解決?

    安裝依賴的 Python 軟件,出現了如下錯誤,請問如何解決,謝謝! Command \"E:/msys32/mingw32/bin/python2.7.exe E:/msys32
    發表于 06-26 07:32
    主站蜘蛛池模板: 丰满年轻岳欲乱中文字幕 | 欧美一级特黄啪啪片免费看 | 精品福利| 久久精品第一页 | 最新日本免费一区二区三区中文 | 操碰视频在线 | 黄床大片| 日本黄大片在线观看 | 亚洲好骚综合 | 搞逼综合网 | 四虎国产永久免费久久 | 欧美乱强性伦xxxxx | sihu影院永久在线影院 | 素股中文字幕 | 亚洲网站大全 | 久久99国产亚洲高清观看首页 | 亚洲日韩色图 | 爱操成人网 | 激情欧美一区二区三区中文字幕 | 欧美黑粗特黄午夜大片 | 日本特级黄色大片 | 午夜爱爱小视频 | 欧美性色欧美a在线播放 | 日本黄大乳片免费观看 | 黄色美女网址 | 四虎永久免费地址在线网站 | 在线网站你懂得 | 午夜精品网站 | 在线观看天堂 | 国产偷窥女洗浴在线观看亚洲 | 中文字幕一区二区三区免费看 | 美女露出扒开尿口让男人桶 | 全国男人的天堂天堂网 | 在线免费观看h | 日韩免费一级片 | 午夜影视啪啪免费体验区入口 | 六月丁香激情 | 天堂视频免费 | 日本污污视频 | 亚洲欧洲一区二区三区在线观看 | 26uuu欧美性色 |