国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中標(biāo)準(zhǔn)模塊importlib詳解

2020-02-23 04:36:18
字體:
供稿:網(wǎng)友

1 模塊簡介

Python提供了importlib包作為標(biāo)準(zhǔn)庫的一部分。目的就是提供Python中import語句的實現(xiàn)(以及__import__函數(shù))。另外,importlib允許程序員創(chuàng)建他們自定義的對象,可用于引入過程(也稱為importer)。

什么是imp?

另外有一個叫做imp的模塊,它提供給Python import語句機制的接口。這個模塊在Python 3.4中被否決,目的就是為了只使用importlib。

這個模塊有些復(fù)雜,因此我們在這篇博文中主要討論以下幾個主題:

•動態(tài)引入
•檢查模塊是否可以被引入
•引入源文件自身
•第三方模塊 import_from_github_com

2 模塊使用

2.1 動態(tài)引入

importlib模塊支持傳入字符串來引入一個模塊。我們創(chuàng)建兩個簡單的模塊來驗證這個功能。我們將會給予兩個模塊相同的接口,讓它們打印名字以便我們能夠區(qū)分它們。創(chuàng)建兩個模塊,分別為foo.py和bar.py,代碼如下所示,

def main(): print(__name__)

現(xiàn)在我們使用importlib來引入它們。讓我們看看這段代碼如何去做的。確保你已經(jīng)把這段代碼放在與上面創(chuàng)建的兩個模塊相同的目錄下。

#importer.pyimport importlibdef dynamic_import(module): return importlib.import_module(module)if __name__ == "__main__": module = dynamic_import('foo') module.main() module_two = dynamic_import('bar') module_two()

在這段代碼中,我們手動引入importlib模塊,并創(chuàng)建一個簡單的函數(shù)dynamic_import。這個函數(shù)所做的就是調(diào)用importlib模塊中的import_module函數(shù),入?yún)⒕褪俏覀儌魅氲淖址缓蠓祷卣{(diào)用結(jié)果。在代碼段的下面,我們調(diào)用每個模塊的main方法,將會打印出每個模塊的名稱。

在你的代碼中,你可能不會大量這樣做。當(dāng)你只有一個字符串時,如果你想引入這個模塊,importlib就允許你可以這么做。

2.2 模塊引入檢查

Python有一個編碼規(guī)范就是EAPP:Easier to ask for forgiveness than permision。意思就是經(jīng)常假設(shè)一些事情是存在的(例如,key在詞典中),如果出錯了,那么就捕獲異常。你可以看 Python標(biāo)準(zhǔn)模塊--import 文章中我們嘗試引入模塊,當(dāng)它不存在時,我們就會捕獲到ImportError。如果我們想檢查并觀察一個模塊是否可以引入而不是僅僅是猜測,該如何去做?你可以使用importlib。代碼如下:

#coding:utf-8import importlib.utilimport importlibdef check_module(module_name): module_spec = importlib.util.find_spec(module_name) if module_spec is None: print("Module :{} not found".format(module_name)) return None else: print("Module:{} can be imported!".format(module_name)) return module_spec def import_module_from_spec(module_spec): module = importlib.util.module_from_spec(module_spec) module_spec.loader.exec_module(module) return moduleif __name__ == "__main__": module_spec = check_module("fake_module") module_spec = check_module("collections") if(module_spec): module = import_module_from_spec(module_spec) print(dir(module))            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洞头县| 宁远县| 青海省| 吉林省| 抚远县| 荥经县| 天祝| 丽江市| 丘北县| 上犹县| 尖扎县| 扎兰屯市| 如东县| 惠安县| 乐山市| 雷波县| 南安市| 麦盖提县| 鹤庆县| 吴川市| 五寨县| 达孜县| 天台县| 汉寿县| 西乌| 平舆县| 平罗县| 化隆| 尉犁县| 二连浩特市| 奎屯市| 潞西市| 鄢陵县| 普兰县| 霍州市| 尼木县| 久治县| 皮山县| 额尔古纳市| 莱芜市| 昆明市|