> > from foo import barsuccessful to be imported >> > from foo import bar >> > 重載模塊方法一 如果你使用的 python2(記得前面在 foo 文件夾下加一個 __init__.py ),有一" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

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

模塊重載的五種方法

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-02 10:50 ? 次閱讀

環(huán)境準(zhǔn)備

新建一個 foo 文件夾,其下包含一個 bar.py 文件

$ tree foo
foo
└── bar.py

0 directories, 1 file

bar.py 的內(nèi)容非常簡單,只寫了個 print 語句

print("successful to be imported")

只要 bar.py 被導(dǎo)入一次,就被執(zhí)行一次 print

禁止重復(fù)導(dǎo)入

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

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >

重載模塊方法一

如果你使用的 python2(記得前面在 foo 文件夾下加一個 __init__.py),有一個 reload 的方法可以直接使用

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > reload(bar)
successful to be imported
< module 'foo.bar' from 'foo/bar.pyc' >

如果你使用的 python3 那方法就多了,詳細(xì)請看下面

重載模塊方法二

如果你使用 Python3.0 -> 3.3,那么可以使用 imp.reload 方法

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > import imp
 >> > imp.reload(bar)
successful to be imported
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >

但是這個方法在 Python 3.4+,就不推薦使用了

< stdin >:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

重載模塊方法三

如果你使用的 Python 3.4+,請使用 importlib.reload 方法

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > import importlib
 >> > importlib.reload(bar)
successful to be imported
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >

重載模塊方法四

如果你對包的加載器有所了解(詳細(xì)可以翻閱我以前寫的文章: https://iswbm.com/84.html

還可以使用下面的方法

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > bar.__spec__.loader.load_module()
successful to be imported
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >

重載模塊方法五

既然影響我們重復(fù)導(dǎo)入的是 sys.modules,那我們只要將已導(dǎo)入的包從其中移除是不是就好了呢?

>> > import foo.bar
successful to be imported
 >> >
 >> > import foo.bar
 >> >
 >> > import sys
 >> > sys.modules['foo.bar']
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >
 >> > del sys.modules['foo.bar']
 >> >
 >> > import foo.bar
successful to be imported

有沒有發(fā)現(xiàn)在前面的例子里我使用的都是 from foo import bar,在這個例子里,卻使用 import foo.bar,這是為什么呢?

這是因為如果你使用 from foo import bar 這種方式,想使用移除 sys.modules 來重載模塊這種方法是失效的。

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

>> > import foo.bar
successful to be imported
 >> >
 >> > import foo.bar
 >> >
 >> > import sys
 >> > del sys.modules['foo.bar']
 >> > from foo import bar
 >> >
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2613

    瀏覽量

    47010
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84077
收藏 人收藏

    評論

    相關(guān)推薦

    電感計算公式與種方法

    由Q值決定諧振電感: l 單位: 微亨第種方法:線圈電感的計算公式1、針對環(huán)行CORE,有以下公式可利用: (IRON)L=N2.AL L= 電感值(H)H-DC=0.4πNI / l N= 線圈
    發(fā)表于 11-02 09:19

    java方法重載詳解

    Java重載是指Java允許在一個類中,存在多個擁有相同的名字,但參數(shù)不同的方法,編譯器會根據(jù)實際情況挑選出正確的方法,如果編譯器找不到匹配的參數(shù)或者找出多個可能的匹配就會產(chǎn)生編譯時錯誤,這個過程
    發(fā)表于 03-19 16:14

    實現(xiàn)流水燈的方法介紹

    的主題,今天的主題是種方法實現(xiàn)流水燈,講這個的目的不是為了讓你會種方法而可以在小伙伴中炫耀,而是想告訴大家一個理念,學(xué)習(xí)要善于思考,活學(xué)活用,解決問題的辦法不只有一個。好了,先上一
    發(fā)表于 07-13 00:30

    基于MySQL根據(jù)出生日期計算年齡的種方法

    MySQL根據(jù)出生日期計算年齡的種方法比較
    發(fā)表于 04-01 14:49

    啟動Redis的三種方法

    Redis筆記(1)——安裝、卸載、三種方法啟動Redis,Redis命令使用(干貨十足),Redis兩種方法設(shè)置密碼,時間復(fù)雜度(更完善哦~)
    發(fā)表于 06-08 16:09

    芯片功能測試的種方法!

    芯片功能測試常用5種方法有板級測試、晶圓CP測試、封裝后成品FT測試、系統(tǒng)級SLT測試、可靠性測試。
    發(fā)表于 06-09 16:25

    噪聲系數(shù)測量的三種方法

    噪聲系數(shù)測量的三種方法 本文介紹了測量噪聲系數(shù)的三種方法:增益法、Y
    發(fā)表于 05-07 13:38 ?2118次閱讀

    安裝LED燈帶的5種方法

    如何安裝LED燈帶呢?大家可以試試以下種方法。
    發(fā)表于 07-20 14:53 ?8612次閱讀

    種方法拆卸PCB貼片元件資料下載

    電子發(fā)燒友網(wǎng)為你提供種方法拆卸PCB貼片元件資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-24 08:42 ?11次下載
    <b class='flag-5'>五</b><b class='flag-5'>種方法</b>拆卸PCB貼片元件資料下載

    python統(tǒng)計詞頻的三種方法

    python統(tǒng)計詞頻的三種方法方法。
    發(fā)表于 05-25 14:33 ?2次下載

    識別電路的10種方法

    對較復(fù)雜的電路應(yīng)先將原電路簡化為等效電路,以便分析和計算。識別電路的方法很多,現(xiàn)結(jié)合具體實例介紹十種方法。
    發(fā)表于 02-08 16:20 ?243次下載
    識別電路的10<b class='flag-5'>種方法</b>

    python中間模塊重載介紹

    python通過reload重載模塊動態(tài)更新最新代碼。 ## 1.1 reload
    的頭像 發(fā)表于 02-21 11:16 ?475次閱讀

    分享芯片功能測試的種方法

    芯片功能測試常用5種方法有板級測試、晶圓CP測試、封裝后成品FT測試、系統(tǒng)級SLT測試、可靠性測試。
    的頭像 發(fā)表于 06-09 15:46 ?2642次閱讀
    分享芯片功能測試的<b class='flag-5'>五</b><b class='flag-5'>種方法</b>!

    實現(xiàn)更好5G的種方法.zip

    實現(xiàn)更好5G的種方法
    發(fā)表于 01-13 09:07 ?0次下載

    人臉檢測的種方法各有什么特征和優(yōu)缺點

    人臉檢測是計算機(jī)視覺領(lǐng)域的一個重要研究方向,主要用于識別和定位圖像中的人臉。以下是常見的人臉檢測方法及其特征和優(yōu)缺點的介紹: 基于膚色的方法 特征:基于膚色的
    的頭像 發(fā)表于 07-03 14:47 ?424次閱讀