10.10 通過(guò)字符串名導(dǎo)入模塊

2018-02-24 15:27 更新

問(wèn)題

你想導(dǎo)入一個(gè)模塊,但是模塊的名字在字符串里。你想對(duì)字符串調(diào)用導(dǎo)入命令。

解決方案

使用importlib.import_module()函數(shù)來(lái)手動(dòng)導(dǎo)入名字為字符串給出的一個(gè)模塊或者包的一部分。舉個(gè)例子:

>>> import importlib
>>> math = importlib.import_module('math')
>>> math.sin(2)
0.9092974268256817
>>> mod = importlib.import_module('urllib.request')
>>> u = mod.urlopen('http://www.python.org')
>>>

import_module只是簡(jiǎn)單地執(zhí)行和import相同的步驟,但是返回生成的模塊對(duì)象。你只需要將其存儲(chǔ)在一個(gè)變量,然后像正常的模塊一樣使用。

如果你正在使用的包,import_module()也可用于相對(duì)導(dǎo)入。但是,你需要給它一個(gè)額外的參數(shù)。例如:

import importlib
# Same as 'from . import b'
b = importlib.import_module('.b', __package__)

討論

使用import_module()手動(dòng)導(dǎo)入模塊的問(wèn)題通常出現(xiàn)在以某種方式編寫(xiě)修改或覆蓋模塊的代碼時(shí)候。例如,也許你正在執(zhí)行某種自定義導(dǎo)入機(jī)制,需要通過(guò)名稱(chēng)來(lái)加載一個(gè)模塊,通過(guò)補(bǔ)丁加載代碼。

在舊的代碼,有時(shí)你會(huì)看到用于導(dǎo)入的內(nèi)建函數(shù)import()。盡管它能工作,但是importlib.import_module() 通常更容易使用。

自定義導(dǎo)入過(guò)程的高級(jí)實(shí)例見(jiàn)10.11小節(jié)

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)