20201223_147_import載入底層原理_importlib模組
阿新 • • 發佈:2021-01-05
技術標籤:學習筆記_Python程式設計基礎_Pycharm版
文章目錄
2.4 import()動態匯入
import 語句本質上就是呼叫內建函式__import__(),我們可以通過它實現動態匯入,即給__import__()動態傳遞不同的的引數值,就能匯入不同的模組。
【例】使用__import__()動態匯入指定的模組
s = 'math'
m = __import__(s) # 匯入後生成的模組物件引用給變數m
print(m.pi)
執行結果:
注意:一般不建議我們自行使用__import__()匯入,其行為在 python2 和 python3 中有差異,會導致意外錯誤。如果需要動態匯入可以使用 importlib 模組。
【例2】使用Python官方推薦的importlib實現動態匯入
import importlib
a = importlib.import_module('math')
print(a.pi)
2.5 模組的載入問題
當匯入一個模組時, 模組中的程式碼都會被執行。不過,如果再次匯入這個模組,則不會再次執行。
Python 的設計者為什麼這麼設計?因為,匯入模組更多的時候需要的是定義模組中的變數、 函式 、物件等。 這些並不需要反覆定義和執行。“只匯入一次(import-only-once)”就成了一種優化。
一個模組無論匯入多少次,這個模組在整個直譯器程序內有且僅有一個例項物件。
【例】
test02.py 的原始碼:
print('test02正在被載入...')
def add(a, b):
return a + b
.2
在test03中執行以下程式碼
import test02
執行結果:
分析:
這個執行結果進一步向我們展示了,import的行為其實就是在程式中執行一遍import模組中的程式碼。
.3
若在test03中執行以下程式碼:
import test02
import test02
import test02
執行結果:
分析:
由此結果可見,import test02的執行只執行了一遍,可以印證:
一個模組無論匯入多少次,這個模組在整個直譯器程序內有且僅有一個例項物件。
重新載入
有時候我們確實需要重新載入一個模組,這時候可以使用:importlib.reload()方法:
【例】
import test02
import test02
print('###############')
import importlib
importlib.reload(test02)
執行結果: