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

chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

模塊重載的五種方法

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-02 10:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

$ tree foo
foo
└── bar.py

0 directories, 1 file

bar.py 的內(nèi)容非常簡(jiǎn)單,只寫(xiě)了個(gè) print 語(yǔ)句

print("successful to be imported")

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

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

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

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

重載模塊方法一

如果你使用的 python2(記得前面在 foo 文件夾下加一個(gè) __init__.py),有一個(gè) 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ì)請(qǐng)看下面

重載模塊方法二

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

但是這個(gè)方法在 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+,請(qǐng)使用 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' >

重載模塊方法四

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

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

這是因?yàn)槿绻闶褂?from foo import bar 這種方式,想使用移除 sys.modules 來(lái)重載模塊這種方法是失效的。

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

>> > import foo.bar
successful to be imported
 >> >
 >> > import foo.bar
 >> >
 >> > import sys
 >> > del sys.modules['foo.bar']
 >> > from foo import bar
 >> >
聲明:本文內(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)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2812

    瀏覽量

    52307
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4848

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    電感計(jì)算公式與種方法

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

    java方法重載詳解

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

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

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

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

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

    啟動(dòng)Redis的三種方法

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

    芯片功能測(cè)試的種方法!

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

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

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

    解決電池問(wèn)題有三種方法

    解決電池問(wèn)題有三種方法      對(duì)于手機(jī)電池問(wèn)題如何解決,業(yè)內(nèi)人士指出有以下三種方法:   一、發(fā)明新型電池。目前有日本生產(chǎn)商已經(jīng)展示了概念性的燃
    發(fā)表于 11-10 14:26 ?1110次閱讀

    安裝LED燈帶的5種方法

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

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

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

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

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

    識(shí)別電路的10種方法

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

    分享芯片功能測(cè)試的種方法!

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

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

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

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

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