20201223 147 import載入底層原理

2021-10-12 18:43:38 字數 1722 閱讀 5833

2.4import()動態匯入

import 語句本質上就是呼叫內建函式__import__(),我們可以通過它實現動態匯入,即給__import__()動態傳遞不同的的引數值,就能匯入不同的模組。

【例】使用__import__()動態匯入指定的模組

s =

'math'

m =__import__

(s)# 匯入後生成的模組物件引用給變數m

print

(m.pi)

執行結果:

注意:一般不建議我們自行使用__import__()匯入,其行為在 python2 和 python3 中有差異,會導致意外錯誤。如果需要動態匯入可以使用 importlib 模組。

【例2】使用python官方推薦的importlib實現動態匯入

2.5 模組的載入問題

當匯入乙個模組時, 模組中的**都會被執行。不過,如果再次匯入這個模組,則不會再次執行。

python 的設計者為什麼這麼設計?因為,匯入模組更多的時候需要的是定義模組中的變數、 函式 、物件等。 這些並不需要反覆定義和執行。「只匯入一次(import-only-once)」就成了一種優化。

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

【例】.1test02.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的執行只執行了一遍,可以印證:

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

【例】

import test02

import test02

print

('###############'

)import importlib

importlib.

reload

(test02)

webpack中require和import的區別

經典的commonjs同步語法如下 var a require a a.show 此時webpack會將a.js打包進引用它的檔案中。這是最普遍的情形,不必贅述。在commonjs中有乙個modules async a規範,裡面定義了require.ensure語法。webpack實現了它,作用是可...

pycharm安裝多個虛擬環境後,import失敗

現象 本人有安裝多個虛擬環境。但匯入包時,總是各種報錯。但是我明明有安裝的,最後發現是環境變數沒有把pipenv的路徑加進去。加入環境變數 import sys print python s on s sys.version,sys.platform sys.path.extend c users ...

sas中csv等常用格式資料利用import匯入

csv格式資料是以逗號為分割符號的一種資料記錄形式,可以通過以下 匯入 import data in csv format proc import out work.exer2 datafile c users lenovo desktop exer1.csv repace run xls格式資料是...