成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 炫技操作:模塊重載的五種方法

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

環境準備

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

  1. $ tree foo 
  2. foo 
  3. └── bar.py 
  4.  
  5. 0 directories, 1 file 

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

  1. print("successful to be imported") 

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

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

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 

重載模塊方法一

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

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> reload(bar) 
  6. successful to be imported 
  7. <module 'foo.bar' from 'foo/bar.pyc'> 

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

重載模塊方法二

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

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> import imp 
  6. >>> imp.reload(bar) 
  7. successful to be imported 
  8. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 

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

  1. <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 方法

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> import importlib 
  6. >>> importlib.reload(bar) 
  7. successful to be imported 
  8. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 

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

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> bar.__spec__.loader.load_module() 
  6. successful to be imported 
  7. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 

重載模塊方法五

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

  1. >>> import foo.bar 
  2. successful to be imported 
  3. >>> 
  4. >>> import foo.bar 
  5. >>> 
  6. >>> import sys 
  7. >>> sys.modules['foo.bar'] 
  8. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 
  9. >>> del sys.modules['foo.bar'] 
  10. >>> 
  11. >>> import foo.bar 
  12. successful to be imported 

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

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

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

  1. >>> import foo.bar 
  2. successful to be imported 
  3. >>> 
  4. >>> import foo.bar 
  5. >>> 
  6. >>> import sys 
  7. >>> del sys.modules['foo.bar'] 
  8. >>> from foo import bar 
  9. >>> 

 

責任編輯:趙寧寧 來源: Python編程時光
相關推薦

2021-08-18 11:55:25

Python函數代碼

2020-05-14 10:36:34

Python數據開發

2020-12-21 11:07:58

Python開發安裝

2020-04-10 08:59:38

Python合并字典語言

2020-11-26 09:14:47

Python操作 轉義

2022-12-29 08:46:15

IT采購投資

2022-12-07 11:24:51

首席信息官IT

2009-07-03 17:48:24

JSP頁面跳轉

2025-04-25 08:55:00

Pod運維

2020-03-30 09:51:37

Python數據語言

2020-08-06 13:19:10

IBM多云管理

2020-12-03 14:40:10

云管理

2024-07-09 08:43:52

2022-01-10 06:52:59

查詢MySQL字段

2011-04-21 10:08:34

2021-11-02 07:54:40

List分片Java

2015-09-10 09:30:54

Java多線程同步

2020-04-02 10:45:48

多云云計算云平臺

2022-11-23 13:46:02

云支出云計算

2019-12-12 20:03:08

PythonC語言編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 56pao在线 | 中文字幕一区在线 | 日韩视频中文字幕 | 黄色大全免费看 | 亚洲精品一区二区在线观看 | 丝袜美腿一区二区三区 | 99reav| 午夜羞羞| 天天综合91 | 中文字幕一区在线 | 日本激情视频在线播放 | 亚洲成人天堂 | 亚洲成av片人久久久 | 成人黄色av网址 | 免费一级大片 | 国产精品美女久久久久aⅴ国产馆 | 欧美日韩福利 | 黄网站在线观看 | 国产精品日日夜夜 | 一区二区三区高清 | 成年人精品视频在线观看 | 台湾a级理论片在线观看 | 性视频网 | 日韩久久久久久久久久久 | 欧美一a一片一级一片 | 在线免费观看日本视频 | 日韩欧美在线不卡 | 99精品国产一区二区三区 | 亚洲国产精品人人爽夜夜爽 | 一区二区三区在线观看视频 | 夜夜爽99久久国产综合精品女不卡 | 免费观看羞羞视频网站 | 久久久精品网站 | 久久久91精品国产一区二区三区 | 免费黄色大片 | 一区二区三区免费观看 | 欧美精品久久久久 | 久久中文字幕在线 | 嫩草影院网址 | 亚洲精品在线免费看 | 精品国产一区二区国模嫣然 |