mywang88
2019-01-06
簡介
在 Python 編程中,爲了便於維護,通常會把程序拆分爲若干個模塊(Module),在主程序中導入(import)這些模塊。
模塊中的內容可以是函數和類的定義,也可以是參數值的聲明。
模塊中的語句會且只會在第一次 import 該模塊的時候被執行一次。
在實際項目中,有時會遇到這種情形:程序需要持續保持運行,而我們希望在不中斷程序的前提下修改一個參數,且改動的內容能立刻影響到程序。
在這種情形下,可以使用 Python3 的 importlib 庫的 reload 函數。
- Python 版本:3.7.1
例子
創建一個文件夾,名爲 learning
。
創建一個文件,名爲 parameters.py
,內容如下:
word = 'Hello'
創建一個文件,名爲 repeat.py
,內容如下:
import importlib
import time
import learning.parameters as pa
while True:
importlib.reload(pa)
print(pa.word)
time.sleep(1)
執行 repeat.py
,它會每秒打印一條 word
的值。
在不停止 repeat.py
的執行的情況下,修改 parameters.py
中 word
的值,並保存。將會發現正在執行的 repeat.py
打印的信息發生了改變。
這樣就實現了在程序運行中改變參數的目標。
補充
在較早的 Python 版本中,importlib
庫的名稱似乎是 imp
,目前版本中,imp
似乎也可以使用。
在早期的編程中,程序的參數常常放置在一個文本文件中,在程序運行中使用文件流(python 中爲 open read write 等函數)的形式讀取,但這會對文件中的文本的格式提出嚴格要求,且只能先讀入字符串。
reload
函數的好處是它可以導入 Python 中的所有數據類型而不需考慮格式問題,它甚至可以在程序運行中更改某些函數和類的定義。