日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

3天內不再提示

詳解python常規(guī)包與命名空間包

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-11 15:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

python常規(guī)包與命名空間包

1. 常規(guī)包

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

舉個例子,現(xiàn)在有如下的目錄樹,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 模式,發(fā)現(xiàn)導入是正常的

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

使用 __path__ 查看一下,發(fā)現(xiàn) demo 不再是一個常規(guī)包了,而是一個 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。這時候再導入這兩個包的時候,發(fā)現(xiàn)這兩個包被合并到一起了

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

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

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

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

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

>>> demo

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

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

    關注

    1

    文章

    119

    瀏覽量

    22432
  • 空間
    +關注

    關注

    2

    文章

    50

    瀏覽量

    14107
  • python
    +關注

    關注

    58

    文章

    4889

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Maxim產品命名規(guī)則詳解

    Maxim產品命名規(guī)則詳解 在電子工程領域,了解產品的命名規(guī)則對于正確選擇和使用電子元件至關重要。Maxim作為一家知名的半導體公司,其產品命名有一套獨特的規(guī)則。今天,我們就來詳細探討
    的頭像 發(fā)表于 04-03 16:50 ?647次閱讀

    [VirtualLab] 使用Python運行VirtualLab Fusion光學仿真

    : https://code.visualstudio.com/docs/python/python-tutorial 請注意,這里我們將演示如何在全局環(huán)境中安裝所需的軟件。對于使用多個Py
    發(fā)表于 03-31 09:39

    如何在 VisionFive 上使用 Python ?

    來安裝 愿景五.gpio 軟件: sudo pip install 愿景五.gpio或者,您可以執(zhí)行以下命令: sudo pip3 install 愿景五.gpio (可選)如果將源代碼復制到
    發(fā)表于 03-30 08:28

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

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

    如何使用wireshark進行遠程抓

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

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

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

    Pico Technology發(fā)布Python軟件pyPicoSDK

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

    ENV添加micropython軟件出現(xiàn)異常的原因?

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

    快斷式覆成型保險絲 skyworksinc

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

    鴻蒙5開發(fā)寶藏案例分享---優(yōu)化應用體積大小問題

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

    自動膠機遠程監(jiān)控物聯(lián)網解決方案

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

    藍牙數(shù)據(jù)通道空口(數(shù)據(jù)

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

    藍牙廣播

    ?藍牙廣播,全名藍牙廣播通道(channel)空中,即在藍牙廣播通道上傳輸?shù)目罩?b class='flag-5'>包,為兩種空中的一種,其具體格式如下所示: ? 編輯 Advertising Header即前述的
    發(fā)表于 06-03 10:47

    Bluetooth LE Link Layer數(shù)據(jù)全解析

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

    Cadence SPB OrCAD Allegro22.1安裝

    Windows 8操作系統(tǒng),最低需要Windows 10 64位操作系統(tǒng),如果是Windows Server版需要Windows Server 2012 R2起步。安裝后將占用接近20GB的硬盤空間。?版權所有此安裝所安裝的 Cadence 相關軟件版權歸屬于 Cad
    發(fā)表于 05-22 16:50 ?10次下載
    邹城市| 泽普县| 枣强县| 平泉县| 浦县| 弋阳县| 黑河市| 仙游县| 广元市| 遵义县| 白朗县| 闽侯县| 呼伦贝尔市| 新沂市| 保德县| 项城市| 大田县| 雷山县| 鸡西市| 年辖:市辖区| 江津市| 库车县| 云和县| 遂宁市| 迭部县| 屯门区| 乳山市| 攀枝花市| 武安市| 江都市| 古交市| 乡宁县| 东城区| 大关县| 南充市| 湖州市| 安龙县| 乌兰察布市| 保德县| 临海市| 桃江县|