国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    119

    瀏覽量

    22346
  • 空間
    +關注

    關注

    2

    文章

    50

    瀏覽量

    14075
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

    90025
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    詳解網絡丟故障排查過程

    干運維這么多年,見過各種各樣的故障,但有些問題真的是讓人抓狂。前段時間遇到的一個MTU問題,差點讓我懷疑人生。表面上看是簡單的丟,實際上折騰了整整兩天才定位到根因。今天就把這個案例完整地記錄下來,順便把MTU相關的知識點系統地梳理一遍,希望能幫到遇到類似問題的兄弟們。
    的頭像 發表于 01-26 15:21 ?485次閱讀

    初識ros2 功能建立與可執行文件的配置

    本文介紹了ROS2程序的兩種啟動方式:直接運行可執行文件(ros2 run)和使用啟動文件(ros2 launch)。重點講解了Python軟件的結構,包括package.xml、setup.py
    的頭像 發表于 01-22 13:41 ?234次閱讀

    如何使用wireshark進行遠程抓

    一、概述 通常我們使用wireshark進行抓分析的時候,在遠端設備抓取一部分數據后,再回傳到本地,然后使用wireshark進行分析。這種操作主要是抓取的數據不是實時的,不能做實時
    的頭像 發表于 01-16 16:05 ?1040次閱讀
    如何使用wireshark進行遠程抓<b class='flag-5'>包</b>

    別錯過!Altair 電池仿真解決方案,干貨滿滿!

    電池相關問題1.建模2.電池/箱/模塊強度分析密度大,重量質分布集中3.振動與沖擊噪聲與舒適性要求沖擊速度高4.熱管理發熱量大,結構復雜工作溫度控制要求高5.碰撞安全電池擠壓變形過大引起漏
    的頭像 發表于 11-20 14:19 ?2431次閱讀
    別錯過!Altair 電池<b class='flag-5'>包</b>仿真解決方案,干貨滿滿!

    Pico Technology發布Python軟件pyPicoSDK

    近日,全球領先的基于 PC 的儀器供應商Pico Technology 官方發布了 pyPicoSDK,這是一款旨在簡化 PicoScopes 應用的 Python 軟件。pyPicoSDK 在
    的頭像 發表于 09-29 15:03 ?946次閱讀

    ENV添加micropython軟件出現異常的原因?

    python27.dll和platformenv_releasedenvtoolsPython27換一下。結果還是錯誤?。 沒辦法了,就行下一步添加micropython軟件。按照教程走出現了這個東西我直接
    發表于 09-12 08:06

    快斷式覆成型保險絲 skyworksinc

    電子發燒友網為你提供()快斷式覆成型保險絲相關產品參數、數據手冊,更有快斷式覆成型保險絲的引腳圖、接線圖、封裝手冊、中文資料、英文資料,快斷式覆成型保險絲真值表,快斷式覆成型保
    發表于 07-24 18:34
    快斷式<b class='flag-5'>包</b>覆成型保險絲 skyworksinc

    鴻蒙5開發寶藏案例分享---優化應用體積大小問題

    少被討論。趕緊來跟大家分享一波,附代碼詳解和實操建議,讓你的應用秒瘦身~? ?1. SO庫壓縮:立竿見影的瘦身術 問題 :SO庫(尤其是C++庫)占用空間大,默認打包不壓縮。優化 **:在 **&
    發表于 06-13 10:09

    自動膠機遠程監控物聯網解決方案

    在現代制造業中,自動膠機廣泛應用于電子、汽車、電池等眾多行業,承擔著產品膠、封裝等關鍵工序。隨著企業生產規模的擴大和智能化轉型的需求,對自動膠機的高效管理和實時監控變得愈發重要。傳統的現場操作
    的頭像 發表于 06-07 14:02 ?834次閱讀

    藍牙數據通道空口(數據

    ? 與藍牙廣播相對應,藍牙數據是另一種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

    Cadence SPB OrCAD Allegro22.1安裝

    Windows 8操作系統,最低需要Windows 10 64位操作系統,如果是Windows Server版需要Windows Server 2012 R2起步。安裝后將占用接近20GB的硬盤空間。?版權所有此安裝所安裝的 Cadence 相關軟件版權歸屬于 Cad
    發表于 05-22 16:50 ?10次下載

    動力電池氣密性檢測儀的操作方法-岳信儀器

    動力電池氣密性檢測儀是確保電池密封完整性的關鍵設備。以下是簡單的操作步驟,幫助用戶高效、準確地完成檢測過程。(1)準備階段。首先,檢查動力電池氣密性檢測儀的電源和氣源是否連接正常,確保設備能夠
    的頭像 發表于 04-19 11:55 ?759次閱讀
    動力電池<b class='flag-5'>包</b>氣密性檢測儀的操作方法-岳信儀器

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

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