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

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

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

關(guān)于python包導(dǎo)入的三個(gè)冷門知識(shí)點(diǎn)

python爬蟲知識(shí)分享 ? 來源:python爬蟲知識(shí)分享 ? 作者:python爬蟲知識(shí)分享 ? 2022-03-14 16:33 ? 次閱讀

1. 使用 __all__ 控制可被導(dǎo)入的變量

使用 from module import * 默認(rèn)情況下會(huì)導(dǎo)入 module 里的所有變量,若你只想從模塊中導(dǎo)入其中幾個(gè)變量,可以在 module 中使用 __all__ 來控制想要被其他模塊導(dǎo)入的變量。

# profile.py
name='小明'
age=18

__all__=['name']

打開 python console 驗(yàn)證一下

>>> from profile import *
>>> print(name)
小明
>>> print(age)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'age' is not defined

__all__ 僅對(duì)于使用from module import * 這種情況適用。

它經(jīng)常在一個(gè)包的 __init__.py 中出現(xiàn)。

2. 命名空間包的神奇之處

命名空間包,一個(gè)陌生的名字。

與我們熟悉的常規(guī)包不同的是,它沒有 __init__.py 文件。

更為特殊的是,它可以跨空間地將兩個(gè)不相鄰的子包,合并成一個(gè)虛擬機(jī)的包,我們將其稱之為 命名空間包

例如,一個(gè)項(xiàng)目的部分代碼布局如下

foo-package/
    spam/
        blah.py

bar-package/
    spam/
        grok.py

在這2個(gè)目錄里,都有著共同的命名空間spam。在任何一個(gè)目錄里都沒有__init__.py文件。

讓我們看看,如果將foo-package和bar-package都加到python模塊路徑并嘗試導(dǎo)入會(huì)發(fā)生什么?

>>> import sys
>>> sys.path.extend(['foo-package', 'bar-package'])
>>> import spam.blah
>>> import spam.grok

當(dāng)一個(gè)包為命名空間包時(shí),他就不再和常規(guī)包一樣具有 __file_ 屬性,取而代之的是 __path__

>>> import sys
>>> sys.path.extend(['foo-package', 'bar-package'])
>>> import spam.blah
>>> import spam.grok
>>> spam.__path__
_NamespacePath(['foo-package/spam', 'bar-package/spam'])
>>> spam.__file__
Traceback (most recent call last):
    File "", line 1, in 
AttributeError: 'module' object has no attribute '__file__'

3. 模塊重載中的一個(gè)坑

由于有 sys.modules 的存在,當(dāng)你導(dǎo)入一個(gè)已導(dǎo)入的模塊時(shí),實(shí)際上是沒有效果的。

為了達(dá)到模塊的重載,有的人會(huì)將已導(dǎo)入的包從 sys.modules 中移除后再導(dǎo)入

就像下面這樣子

>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> sys.modules['foo.bar']

>>> del sys.modules['foo.bar']
>>>
>>> import foo.bar
successful to be imported

上面的例子里我使用的是import foo.bar ,如果你使用的是 from foo import bar 這種導(dǎo)入形式,會(huì)發(fā)現(xiàn)重載是同樣是無效的。

這應(yīng)該算是一個(gè)小坑,不知道的人,會(huì)掉入坑中爬不出來。

>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> del sys.modules['foo.bar']
>>> from foo import bar

因此,在生產(chǎn)環(huán)境中可能需要避免重新加載模塊。而在調(diào)試模式中,它會(huì)提供一定的便利,但你要知道這個(gè)重載的弊端,以免掉入坑里。
審核編輯:湯梓紅

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

    關(guān)注

    4

    文章

    1011

    瀏覽量

    122673
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28388
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84729
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    后悔沒有早點(diǎn)看到:天線設(shè)計(jì)中的知識(shí)點(diǎn)

    Cat.1 bis R13架構(gòu),天線架構(gòu)精簡為單天線架構(gòu),去掉了分集接收天線,因此只需要一根天線。 ? 知識(shí)點(diǎn): Cat.1 bis相對(duì)于Cat.1的區(qū)別是,后者為兩根天線(一根主天線,一根分集天線
    的頭像 發(fā)表于 12-24 17:11 ?304次閱讀
    后悔沒有早點(diǎn)看到:天線設(shè)計(jì)中的<b class='flag-5'>知識(shí)點(diǎn)</b>!

    DNS用戶訪問網(wǎng)站原理

    瀏覽器輸入網(wǎng)址后發(fā)生了什么 這是一個(gè)經(jīng)典的問題,通過回答的細(xì)致程度,可以判斷出,小白、新手、中級(jí)玩家、高端玩家。 關(guān)于這個(gè)問題,小到三兩句話,大到你用三個(gè)月都說不完的知識(shí)點(diǎn),
    的頭像 發(fā)表于 12-17 15:28 ?109次閱讀
    DNS用戶訪問網(wǎng)站原理

    接口測試?yán)碚摗⒁蓡柺珍浥c擴(kuò)展相關(guān)知識(shí)點(diǎn)

    本文章使用王者榮耀游戲接口、企業(yè)微信接口的展示結(jié)合理論知識(shí),講解什么是接口測試、接口測試?yán)碚?、疑問收錄與擴(kuò)展相關(guān)知識(shí)點(diǎn)知識(shí)學(xué)院,快來一起看看吧~
    的頭像 發(fā)表于 11-15 09:12 ?323次閱讀
    接口測試?yán)碚?、疑問收錄與擴(kuò)展相關(guān)<b class='flag-5'>知識(shí)點(diǎn)</b>

    基本理想電路元件的三個(gè)特征是什么

    基本理想電路元件是構(gòu)成電路的基本單元,它們具有三個(gè)基本特征:電壓-電流關(guān)系、能量轉(zhuǎn)換和電路參數(shù)。以下是對(duì)這三個(gè)特征的分析: 電壓-電流關(guān)系 理想電路元件的電壓-電流關(guān)系是其最基本的特征之一。這種關(guān)系
    的頭像 發(fā)表于 08-25 09:38 ?1164次閱讀

    怎么判斷電容三點(diǎn)式和電感三點(diǎn)

    在電子電路中,電容三點(diǎn)式和電感三點(diǎn)式振蕩電路是兩種常見的振蕩電路類型,它們的主要區(qū)別在于反饋元件(電容或電感)與晶體管三個(gè)極(基極、發(fā)射極、集電極)的連接方式。 一、基本概念 1. 電容三點(diǎn)
    的頭像 發(fā)表于 08-21 15:57 ?1883次閱讀

    求助,關(guān)于AD8000 cir文件的導(dǎo)入問題求解

    從LT公司下載的AD8000.CIR文件里包含三個(gè)subject,導(dǎo)入宏,提示有多個(gè)子電路,選擇其中的AD8000,建立模型以后,仿真不正常,應(yīng)該是其他兩個(gè)子電路沒有導(dǎo)入 問題。 請(qǐng)教各位,碰到這個(gè)問題如何處理?
    發(fā)表于 08-07 07:12

    可調(diào)變阻器三個(gè)引腳怎么區(qū)分

    可調(diào)變阻器,也稱為電位器或可變電阻器,是一種可以調(diào)節(jié)電阻值的電子元件。它廣泛應(yīng)用于各種電子設(shè)備中,如音頻設(shè)備、電源管理、電機(jī)控制等。可調(diào)變阻器有三個(gè)引腳,分別是固定端、滑動(dòng)端和可調(diào)端。這三個(gè)引腳
    的頭像 發(fā)表于 07-24 11:12 ?1318次閱讀

    時(shí)間繼電器應(yīng)用的三個(gè)關(guān)鍵點(diǎn)是什么?

    時(shí)間繼電器應(yīng)用的三個(gè)關(guān)鍵點(diǎn):選型、安裝和調(diào)試。 一、時(shí)間繼電器的選型 確定時(shí)間繼電器的類型 時(shí)間繼電器按照工作原理可以分為電磁式、電子式和干簧式等幾種類型。電磁式時(shí)間繼電器具有結(jié)構(gòu)簡單、價(jià)格低廉、可靠性高等特點(diǎn),
    的頭像 發(fā)表于 06-21 10:00 ?810次閱讀

    微波測量的三個(gè)基本參量是什么

    微波測量是電子工程領(lǐng)域中的一個(gè)重要分支,它涉及到對(duì)微波信號(hào)的頻率、幅度、相位等參數(shù)的測量。在微波測量中,有三個(gè)基本參量:頻率、幅度和相位。這三個(gè)參量是微波信號(hào)的基本特征,對(duì)于微波系統(tǒng)的設(shè)計(jì)、調(diào)試
    的頭像 發(fā)表于 05-28 14:46 ?1394次閱讀

    如何判斷極管的三個(gè)極性

    極管是電子電路中的基本元件之一,其性能的好壞直接影響到整個(gè)電路的性能。而判斷極管的三個(gè)極性(基極b、發(fā)射極e、集電極c)是電路分析和設(shè)計(jì)中不可或缺的一步。下面將詳細(xì)介紹判斷極管
    的頭像 發(fā)表于 05-21 15:26 ?6661次閱讀

    個(gè)籬笆三個(gè)樁——記晶體極管的發(fā)明

    個(gè)籬笆三個(gè)樁——記晶體極管的發(fā)明
    的頭像 發(fā)表于 05-12 08:14 ?756次閱讀
    一<b class='flag-5'>個(gè)</b>籬笆<b class='flag-5'>三個(gè)</b>樁——記晶體<b class='flag-5'>三</b>極管的發(fā)明

    模擬電子技術(shù)知識(shí)點(diǎn)問題總結(jié)概覽

    給大家分享模擬電子技術(shù)知識(shí)點(diǎn)問題總結(jié)。
    的頭像 發(fā)表于 05-08 15:16 ?1179次閱讀
    模擬電子技術(shù)<b class='flag-5'>知識(shí)點(diǎn)</b>問題總結(jié)概覽

    一篇搞定DCS系統(tǒng)相關(guān)知識(shí)點(diǎn)

    目標(biāo)。DCS系統(tǒng)廣泛應(yīng)用于各個(gè)行業(yè),如化工、電力、制藥等。在這些行業(yè)中,DCS系統(tǒng)可以實(shí)現(xiàn)對(duì)生產(chǎn)過程的集中監(jiān)控和分散控制,提高生產(chǎn)效率和產(chǎn)品質(zhì)量,降低能耗和減少環(huán)境污染,從而保證產(chǎn)品質(zhì)量,并確保生產(chǎn)過程的安全可靠。 二.DCS系統(tǒng)知識(shí)點(diǎn)
    的頭像 發(fā)表于 03-26 18:40 ?919次閱讀
    一篇搞定DCS系統(tǒng)相關(guān)<b class='flag-5'>知識(shí)點(diǎn)</b>

    【量子計(jì)算機(jī)重構(gòu)未來 | 閱讀體驗(yàn)】第二章關(guān)鍵知識(shí)點(diǎn)

    本帖最后由 oxlm_1 于 2024-3-6 23:20 編輯 之所以將第二章單獨(dú)拿出來,是因?yàn)樵陂喿x過程中,發(fā)現(xiàn)第二章知識(shí)點(diǎn)較多,理解起來比較耗時(shí)間。 第二章的主要知識(shí)點(diǎn): 量子
    發(fā)表于 03-06 23:17

    三個(gè)電位怎么判斷NPN還是PNP

    的極性。 一、晶體管基礎(chǔ)知識(shí) 晶體管是由半導(dǎo)體材料構(gòu)成的,其內(nèi)部包含三個(gè)區(qū)域,即基區(qū)、發(fā)射區(qū)和集電區(qū)。其中,基區(qū)是控制晶體管的區(qū)域,發(fā)射區(qū)與基區(qū)相連,而集電區(qū)與基區(qū)相接。根據(jù)這三個(gè)區(qū)域內(nèi)外的摻雜類型和極性,晶體管可
    的頭像 發(fā)表于 02-27 15:02 ?3131次閱讀