1. 程式人生 > 其它 >20201223_147_import載入底層原理_importlib模組

20201223_147_import載入底層原理_importlib模組

技術標籤:學習筆記_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)”就成了一種優化。

一個模組無論匯入多少次,這個模組在整個直譯器程序內有且僅有一個例項物件。

【例】

.1
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)

執行結果:
在這裡插入圖片描述