Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼
閱讀目錄
一般而言,當(dāng)我們需要某些功能的模塊時(shí)(無(wú)論是內(nèi)置模塊或自定義功能的模塊),可以通過import module 或者 from * import module的方式導(dǎo)入,這屬于靜態(tài)導(dǎo)入,很容易理解。
而如果當(dāng)我們需要在程序的運(yùn)行過程時(shí)才能決定導(dǎo)入某個(gè)文件中的模塊時(shí),并且這些文件提供了同樣的接口名字,上面說(shuō)的方式就不適用了,這時(shí)候需要使用python 的動(dòng)態(tài)導(dǎo)入。
importlib使用
如在scripts目錄中保存著一些功能模塊,向外提供類似的接口poc()和腳本描述信息description,需要傳入一個(gè)參數(shù)target,當(dāng)然腳本執(zhí)行的功能是不一樣的,以下只是舉例:
starnight:EXP-M starnight$ ls scripts/__init__.py __pycache__ test1.py test2.py test3.pystarnight:EXP-M starnight$ cat scripts/test1.py #!/usr/bin/env python# -*- coding:utf-8 -*-description = ’it is a test1’def poc(target): print(’it is a test1’) return True
而我們需要?jiǎng)討B(tài)傳入腳本名,來(lái)選用此時(shí)要執(zhí)行的功能:
#!/usr/bin/env python# -*- coding:utf-8 -*-import importlibscript_name = input(’please input script_name : ’) # 手動(dòng)輸入腳本名 module = importlib.import_module(’scripts.{}’.format(script_name))# 動(dòng)態(tài)導(dǎo)入相應(yīng)模塊func = module.poc(’’)# 執(zhí)行腳本功能print(module.description) # 獲取腳本描述信息
please input script_name : test1it is a test1it is a test1...please input script_name : test3it is a test3it is a test3
當(dāng)我們動(dòng)態(tài)給定腳本名字時(shí),就會(huì)動(dòng)態(tài)的導(dǎo)入該模塊,執(zhí)行相應(yīng)的功能。
importlib其他介紹python doc: importlib
importlib中的幾個(gè)函數(shù):__import__、import_module、find_loader、invalidate_caches、reload
'Note Programmatic importing of modules should use import_module() instead of this function.'當(dāng)進(jìn)行編程時(shí),使用import_module,如上使用該模塊。
find_loader用來(lái)查找模塊,reload重新載入模塊,invalidate_caches不多介紹了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Hybris在idea中debug配置方法詳解2. 在idea中為注釋標(biāo)記作者日期操作3. ASP.Net Core對(duì)USB攝像頭進(jìn)行截圖4. XPath入門 - XSL教程 - 35. ASP.NET MVC實(shí)現(xiàn)橫向展示購(gòu)物車6. JSP靜態(tài)導(dǎo)入與動(dòng)態(tài)導(dǎo)入使用詳解7. .NET6使用ImageSharp實(shí)現(xiàn)給圖片添加水印8. jsp cookie+session實(shí)現(xiàn)簡(jiǎn)易自動(dòng)登錄9. .NET Core Web APi類庫(kù)內(nèi)嵌運(yùn)行的方法10. 通過CSS數(shù)學(xué)函數(shù)實(shí)現(xiàn)動(dòng)畫特效
