女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

python爬蟲(chóng)知識(shí)分享 ? 來(lái)源:python爬蟲(chóng)知識(shí)分享 ? 作者:python爬蟲(chóng)知識(shí)分享 ? 2022-03-11 15:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1. 常規(guī)包

在 Python 3.3 之前或者說(shuō) Python 2 中,一個(gè)包想要被導(dǎo)入使用,那么該包內(nèi)必須要有 __init__.py 文件,這個(gè)文件是 Python 識(shí)別一個(gè)文件夾是否是一個(gè) Python 的重要標(biāo)志。

舉個(gè)例子,現(xiàn)在有如下的目錄樹(shù),demo 及子文件夾 foo 和 bar 下都有 __init__.py 文件。

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

在該目錄下進(jìn)入 Python Console 模式,然后就可以正常導(dǎo)入了

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

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

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

再導(dǎo)入就會(huì)報(bào)錯(cuò)。

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

2. 命名空間包

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

比如還是上面的目錄結(jié)構(gòu):

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

在 Python 3 下進(jìn)入 Python Console 模式,發(fā)現(xiàn)導(dǎo)入是正常的

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

使用 __path__ 查看一下,發(fā)現(xiàn) demo 不再是一個(gè)常規(guī)包了,而是一個(gè) namespace package

>>> demo

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

3. 空間命名包的好處

利用命名空間包這個(gè)技術(shù),可以用來(lái)導(dǎo)入目錄分散的代碼。

比如有如下的目錄樹(shù)

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

在這 xc-pkgxm-pkg 這兩個(gè)目錄里,都有著共同的命名空間 demo。這時(shí)候再導(dǎo)入這兩個(gè)包的時(shí)候,發(fā)現(xiàn)這兩個(gè)包被合并到一起了

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

在這里工作的機(jī)制被稱(chēng)為命名空間包的一個(gè)特征。從本質(zhì)上講,命名空間包是一種特殊的封裝設(shè)計(jì),為合并不同的目錄的代碼到一個(gè)共同的命名空間。

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

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

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

>>> demo

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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 結(jié)構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    117

    瀏覽量

    21952
  • 空間
    +關(guān)注

    關(guān)注

    2

    文章

    50

    瀏覽量

    13855
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4826

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

    ? 與藍(lán)牙廣播相對(duì)應(yīng),藍(lán)牙數(shù)據(jù)是另一種Bluetooth LE packet。藍(lán)牙數(shù)據(jù)是藍(lán)牙數(shù)據(jù)信道空中的簡(jiǎn)稱(chēng),表示空中只在藍(lán)牙數(shù)
    發(fā)表于 06-03 10:51

    藍(lán)牙廣播

    ?藍(lán)牙廣播,全名藍(lán)牙廣播通道(channel)空中,即在藍(lán)牙廣播通道上傳輸?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

    如何將Linux安裝快速轉(zhuǎn)成玲瓏

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

    移動(dòng)電源鼓怎么回事及處理方法

    移動(dòng)電源(充電寶)鼓是一個(gè)值得關(guān)注的安全問(wèn)題,其鼓的原因主要包括以下幾點(diǎn):
    的頭像 發(fā)表于 01-27 15:41 ?5893次閱讀

    I2C總線數(shù)據(jù)結(jié)構(gòu)詳解

    。以下是I2C總線數(shù)據(jù)結(jié)構(gòu)的詳解: 一、I2C總線數(shù)據(jù)的基本組成 I2C總線上的數(shù)據(jù)傳輸以數(shù)據(jù)為單位進(jìn)行,每個(gè)數(shù)據(jù)包包含起始信號(hào)、設(shè)備地址、數(shù)據(jù)傳輸方向位、數(shù)據(jù)字節(jié)以及應(yīng)答信號(hào)(
    的頭像 發(fā)表于 01-17 15:46 ?760次閱讀

    華納云如何解讀WinMTR的丟率數(shù)據(jù)?

    WinMTR顯示的丟率數(shù)據(jù)是指在網(wǎng)絡(luò)路徑上,從你的計(jì)算機(jī)到目標(biāo)主機(jī)之間,數(shù)據(jù)丟失的百分比。丟率是網(wǎng)絡(luò)穩(wěn)定性的一個(gè)重要指標(biāo),它可以幫助識(shí)別網(wǎng)絡(luò)中的問(wèn)題點(diǎn),如路由器故障、網(wǎng)絡(luò)擁塞或配置錯(cuò)誤。以下
    的頭像 發(fā)表于 12-30 16:51 ?537次閱讀

    mtu配置步驟詳解 mtu與數(shù)據(jù)丟失的關(guān)系

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

    Linux網(wǎng)卡收流程

    Linux 網(wǎng)卡收流程如下 網(wǎng)卡收到數(shù)據(jù) 將數(shù)據(jù)從網(wǎng)卡硬件緩存移動(dòng)到服務(wù)器內(nèi)存中(DMA方式,不經(jīng)過(guò)CPU) 通過(guò)硬中斷通知CPU處理 CPU通過(guò)軟中斷通知內(nèi)核處理 經(jīng)過(guò)TCP/IP協(xié)議棧處理
    的頭像 發(fā)表于 12-05 16:21 ?770次閱讀
    Linux網(wǎng)卡收<b class='flag-5'>包</b>流程

    CentOS中使用tcpdump抓

    CentOS中使用tcpdump抓
    的頭像 發(fā)表于 10-28 14:48 ?692次閱讀

    什么是膜壓方線?

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

    使用Python進(jìn)行Ping測(cè)試

    )請(qǐng)求,然后等待目標(biāo)主機(jī)返回響應(yīng),從而測(cè)量網(wǎng)絡(luò)的延遲和丟情況。隨著Python編程語(yǔ)言的廣泛應(yīng)用,越來(lái)越多的網(wǎng)絡(luò)工程師開(kāi)始使用Python
    的頭像 發(fā)表于 08-12 17:56 ?983次閱讀
    使用<b class='flag-5'>Python</b>進(jìn)行Ping測(cè)試

    經(jīng)典藍(lán)牙抓解析說(shuō)明

    在無(wú)線通信協(xié)議的開(kāi)發(fā)過(guò)程中,抓器是工程師們不可或缺的工具。掌握抓器的使用,就如同擁有了能夠洞察無(wú)線電波的“火眼金睛”。這不僅使我們能夠驗(yàn)證發(fā)出的數(shù)據(jù)是否準(zhǔn)確,檢查流程或時(shí)序的合理性,還能幫助
    的頭像 發(fā)表于 07-24 09:04 ?3302次閱讀
    經(jīng)典藍(lán)牙抓<b class='flag-5'>包</b>解析說(shuō)明

    鋁線與純銅線的差別

    鋁線與純銅線是兩種常見(jiàn)的導(dǎo)線材料,它們?cè)陔姎夤こ獭㈦娮釉O(shè)備、通信系統(tǒng)等領(lǐng)域有著廣泛的應(yīng)用。 一、材料特性 導(dǎo)電性能 銅是一種優(yōu)良的導(dǎo)電材料,其導(dǎo)電性能優(yōu)于鋁。純銅線的導(dǎo)電性能比銅鋁線更高
    的頭像 發(fā)表于 07-12 09:37 ?1.6w次閱讀