python importlib 用法小結
在使用Python的時候,大部分時候引入包,都是通過import 語句,比如
import numpy as np
有時候為了更復雜的需求,我們需要用程序化的方式來引入包 (Programmatic Importing), 比如根據(jù)輸入不同,選擇執(zhí)行兩個不同包里面的同名函數(shù),這時候就需要用到importlib這個庫了。這里先從一個簡單例子開始,逐漸深入地講一下這個庫的用法。
import_module用法
importlib 是Python3.1增加的系統(tǒng)庫,其中最常用的函數(shù)是其中的import_module ,功能是用程序語句的方式替代import 語句,用法如下:
import importlib
# 與 import time 效果一樣
time = importlib.import_module('time')
print(time.time())
# 與 import os.path as path 效果一樣
path = importlib.import_module('os.path')
path.join('a', 'b') # results: 'a/b'
# 相對引入, 一級目錄,與 import os.path as path 效果一樣
path = importlib.import_module('.path', package='os')
path.join('a', 'b') # results: 'a/b'
# 相對引入,二級目錄,與 import os.path as path 效果一樣
path = importlib.import_module('..path', package='os.time')
path.join('a', 'b') # results: 'a/b'
注意最后的例子中,相對引入時需要在前面增加.
或者.. 來表示相對目錄,如果直接使用importlib.import_module('path', package='os') 會報錯。
如果光看這幾個例子的話,貌似跟import 沒什么區(qū)別,而且語句變得更復雜了,有點多此一舉的感覺。
其實不是的,個人認為,importlib 的強大之處是將import 語句中寫死的字面值改成了import_module 函數(shù)中的參數(shù),因此可以通過修改參數(shù)在外部用變量來控制實際import的包或者模塊,大大地增加了靈活性。 下面會舉一個稍微實用一些的例子。
一個實際例子
假設我們在設計一個深度學習工具庫,里面包含了N個網(wǎng)絡模型(ResNet50, HRNet, MobileNet等等),每個模型的實現(xiàn)都有一個load_model 的函數(shù)。由于計算設備的性能不同,需要調(diào)用的網(wǎng)絡結構也會變化,我們需要根據(jù)外部傳入的參數(shù)來判斷實際load哪一個模型。
雖然采用import 語句+if-else 判斷也能完成這個需求,舉例實現(xiàn)如下:
def run(model_name, input):
if model_name == 'resnet_50':
from resnet_50.model import load_model
elif model_name == 'hrnet':
from hrnet.model import load_model
elif model_name == 'moblienet':
from mobilenet.model import load_model
model = load_model()
output = model(input)
return output
這種寫法存在下面的兩個問題:
- 寫法很冗余, N個模型的話需要添加2N條語句
- 新增模型時需要修改調(diào)用處的代碼,添加對應的import語句,不符合模塊化的要求。
這時候采用importlib 就能比較簡潔地解決這個問題:
import importlib
def run(model_name, input):
load_model = importlib.import_module('load_model', package='{}.model'.format(model_name))
model = load_model()
output = model(input)
return output
可以看到在這種場景下importlib 確實能大大簡化代碼。
了解這些內(nèi)容,日常使用這個庫就沒什么問題了(好像importlib 針對普通用戶場景的函數(shù)貌似就只有import_module 這一個),別的一些進階的概念由于不太懂,暫時不展開了。
參考
到此這篇關于python importlib 用法小結的文章就介紹到這了,更多相關python importlib 用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python如何把Spark數(shù)據(jù)寫入ElasticSearch
這篇文章主要介紹了Python如何把Spark數(shù)據(jù)寫入ElasticSearch,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
如何實現(xiàn)更換Jupyter Notebook內(nèi)核Python版本
這篇文章主要介紹了如何實現(xiàn)更換Jupyter Notebook內(nèi)核Python版本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
opencv3/Python 稠密光流calcOpticalFlowFarneback詳解
今天小編就為大家分享一篇opencv3/Python 稠密光流calcOpticalFlowFarneback詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python解釋器pycharm安裝及環(huán)境變量配置教程圖文詳解
這篇文章主要介紹了python解釋器pycharm安裝及環(huán)境變量配置教程圖文詳解,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
Python 讀取千萬級數(shù)據(jù)自動寫入 MySQL 數(shù)據(jù)庫
這篇文章主要介紹了Python 讀取千萬級數(shù)據(jù)自動寫入 MySQL 數(shù)據(jù)庫,本篇文章會給大家系統(tǒng)的分享千萬級數(shù)據(jù)如何寫入到 mysql,分為兩個場景,兩種方式2022-06-06
python jieba分詞并統(tǒng)計詞頻后輸出結果到Excel和txt文檔方法
本篇文章主要介紹了python jieba分詞并統(tǒng)計詞頻后輸出結果到Excel和txt文檔方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02

