中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python模塊重載如何實現

發布時間:2022-06-01 11:26:18 來源:億速云 閱讀:149 作者:zzz 欄目:大數據

本文小編為大家詳細介紹“Python模塊重載如何實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python模塊重載如何實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

環境準備

新建一個 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'>

重載模塊方法四如果你對包的加載器有所了解,還可以使用下面的方法

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

讀到這里,這篇“Python模塊重載如何實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐梓县| 威远县| 丰都县| 罗城| 化德县| 克什克腾旗| 台南市| 张掖市| 连平县| 攀枝花市| 长乐市| 洛阳市| 金堂县| 宜川县| 巫山县| 潞城市| 五河县| 会宁县| 凤庆县| 江安县| 江城| 高尔夫| 大余县| 潮安县| 呼图壁县| 嘉义市| 临沧市| 加查县| 合山市| 大竹县| 宁陵县| 宣武区| 乌兰察布市| 佛教| 红河县| 浙江省| 元江| 鄂州市| 曲阳县| 崇州市| 榆社县|