> > from foo import barsuccessful to be imported >> > from foo import bar >> > 重載模塊方法一 如果你使用的 python2(記得前面在 foo 文件夾下加一個 __init__.py ),有一" />

那曲檬骨新材料有限公司

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

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

3天內不再提示

模塊重載的五種方法

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

環境準備

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

$ tree foo
foo
└── bar.py

0 directories, 1 file

bar.py 的內容非常簡單,只寫了個 print 語句

print("successful to be imported")

只要 bar.py 被導入一次,就被執行一次 print

禁止重復導入

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

>> > 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 那方法就多了,詳細請看下面

重載模塊方法二

如果你使用 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' >

重載模塊方法四

如果你對包的加載器有所了解(詳細可以翻閱我以前寫的文章: 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' >

重載模塊方法五

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

>> > 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

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

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

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

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

    關注

    7

    文章

    2735

    瀏覽量

    47753
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85040
收藏 人收藏

    評論

    相關推薦

    電感計算公式與種方法

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

    java方法重載詳解

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

    實現流水燈的方法介紹

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

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

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

    啟動Redis的三種方法

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

    芯片功能測試的種方法

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

    噪聲系數測量的三種方法

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

    安裝LED燈帶的5種方法

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

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

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

    python統計詞頻的三種方法

    python統計詞頻的三種方法方法
    發表于 05-25 14:33 ?2次下載

    識別電路的10種方法

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

    python中間模塊重載介紹

    python通過reload重載模塊動態更新最新代碼。 ## 1.1 reload
    的頭像 發表于 02-21 11:16 ?577次閱讀

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

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

    實現更好5G的種方法.zip

    實現更好5G的種方法
    發表于 01-13 09:07 ?0次下載

    人臉檢測的種方法各有什么特征和優缺點

    人臉檢測是計算機視覺領域的一個重要研究方向,主要用于識別和定位圖像中的人臉。以下是常見的人臉檢測方法及其特征和優缺點的介紹: 基于膚色的方法 特征:基于膚色的
    的頭像 發表于 07-03 14:47 ?974次閱讀
    澳门百家乐官网园游戏| 菲律宾百家乐试玩| 百家乐官网技术交流群| 六合彩开码结果| 皇冠现金网导航| 大发888收获| 大发888问题缺少组件| 大众百家乐娱乐城| 百家乐博娱乐网| 博盈百家乐游戏| 百家乐庄比闲多多少| 免费百家乐官网统计软件| 百家乐官网凯时娱乐平台| 百家乐官网實戰後二穩賺| 百家乐官网庄闲当哪个好| 百家乐官网信用哪个好| 真钱百家乐官网开户试玩| 百家乐官网加牌规则| 百家乐官网游戏玩法技巧| 专栏| 百家乐官网摇色子网站| 百家乐官网作弊工具| 百家乐官网庄比闲多多少| 内江市| 百家乐官网概率计算过程| 百家乐官网开户送彩金28| 百家乐官网买闲打法| 女神百家乐官网娱乐城| 赌片百家乐官网的玩法技巧和规则| 太阳百家乐官网开户| 太阳城百家乐口诀| 真人百家乐源代码| 百家乐线路图分析| 大发888组件下载| 易发娱乐场| 百家乐官网分路单析器| 百家乐官网群sun811.com| 金城百家乐官网买卖路| 狮威百家乐官网娱乐城| 百家乐导航网| 水果机规律|