Python3 中 reload 函數的使用

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.pyword 的值,並保存。將會發現正在執行的 repeat.py 打印的信息發生了改變。

這樣就實現了在程序運行中改變參數的目標。

補充

在較早的 Python 版本中,importlib 庫的名稱似乎是 imp ,目前版本中,imp 似乎也可以使用。

在早期的編程中,程序的參數常常放置在一個文本文件中,在程序運行中使用文件流(python 中爲 open read write 等函數)的形式讀取,但這會對文件中的文本的格式提出嚴格要求,且只能先讀入字符串。

reload 函數的好處是它可以導入 Python 中的所有數據類型而不需考慮格式問題,它甚至可以在程序運行中更改某些函數和類的定義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章