最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python importlib 用法小結(jié)

 更新時(shí)間:2026年02月08日 10:35:35   作者:YunfengWang  
在使用Python的時(shí)候,大部分時(shí)候引入包,都是通過(guò)import語(yǔ)句,通過(guò)這個(gè)庫(kù),可以根據(jù)程序中的變量動(dòng)態(tài)地導(dǎo)入模塊,而不是像傳統(tǒng)導(dǎo)入方式那樣使用固定的字符串,這使得代碼更加靈活,感興趣的可以了解一下

在使用Python的時(shí)候,大部分時(shí)候引入包,都是通過(guò)import 語(yǔ)句,比如

import numpy as np

有時(shí)候?yàn)榱烁鼜?fù)雜的需求,我們需要用程序化的方式來(lái)引入包 (Programmatic Importing), 比如根據(jù)輸入不同,選擇執(zhí)行兩個(gè)不同包里面的同名函數(shù),這時(shí)候就需要用到importlib這個(gè)庫(kù)了。這里先從一個(gè)簡(jiǎn)單例子開(kāi)始,逐漸深入地講一下這個(gè)庫(kù)的用法。

import_module用法

importlib 是Python3.1增加的系統(tǒng)庫(kù),其中最常用的函數(shù)是其中的import_module ,功能是用程序語(yǔ)句的方式替代import 語(yǔ)句,用法如下:

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'

# 相對(duì)引入, 一級(jí)目錄,與 import os.path as path 效果一樣
path = importlib.import_module('.path', package='os')
path.join('a', 'b')  # results: 'a/b'

# 相對(duì)引入,二級(jí)目錄,與 import os.path as path 效果一樣
path = importlib.import_module('..path', package='os.time')
path.join('a', 'b')  # results: 'a/b'

注意最后的例子中,相對(duì)引入時(shí)需要在前面增加.

或者.. 來(lái)表示相對(duì)目錄,如果直接使用importlib.import_module('path', package='os') 會(huì)報(bào)錯(cuò)。

如果光看這幾個(gè)例子的話,貌似跟import 沒(méi)什么區(qū)別,而且語(yǔ)句變得更復(fù)雜了,有點(diǎn)多此一舉的感覺(jué)。

其實(shí)不是的,個(gè)人認(rèn)為,importlib 的強(qiáng)大之處是將import 語(yǔ)句中寫(xiě)死的字面值改成了import_module 函數(shù)中的參數(shù),因此可以通過(guò)修改參數(shù)在外部用變量來(lái)控制實(shí)際import的包或者模塊,大大地增加了靈活性。 下面會(huì)舉一個(gè)稍微實(shí)用一些的例子。

一個(gè)實(shí)際例子

假設(shè)我們?cè)谠O(shè)計(jì)一個(gè)深度學(xué)習(xí)工具庫(kù),里面包含了N個(gè)網(wǎng)絡(luò)模型(ResNet50, HRNet, MobileNet等等),每個(gè)模型的實(shí)現(xiàn)都有一個(gè)load_model 的函數(shù)。由于計(jì)算設(shè)備的性能不同,需要調(diào)用的網(wǎng)絡(luò)結(jié)構(gòu)也會(huì)變化,我們需要根據(jù)外部傳入的參數(shù)來(lái)判斷實(shí)際load哪一個(gè)模型。

雖然采用import 語(yǔ)句+if-else 判斷也能完成這個(gè)需求,舉例實(shí)現(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

這種寫(xiě)法存在下面的兩個(gè)問(wèn)題:

  1. 寫(xiě)法很冗余, N個(gè)模型的話需要添加2N條語(yǔ)句
  2. 新增模型時(shí)需要修改調(diào)用處的代碼,添加對(duì)應(yīng)的import語(yǔ)句,不符合模塊化的要求。

這時(shí)候采用importlib 就能比較簡(jiǎn)潔地解決這個(gè)問(wèn)題:

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

可以看到在這種場(chǎng)景下importlib 確實(shí)能大大簡(jiǎn)化代碼。

了解這些內(nèi)容,日常使用這個(gè)庫(kù)就沒(méi)什么問(wèn)題了(好像importlib 針對(duì)普通用戶場(chǎng)景的函數(shù)貌似就只有import_module 這一個(gè)),別的一些進(jìn)階的概念由于不太懂,暫時(shí)不展開(kāi)了。

參考

  1. https://docs.python.org/3/library/importlib.html

 到此這篇關(guān)于python importlib 用法小結(jié)的文章就介紹到這了,更多相關(guān)python importlib 用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何把Spark數(shù)據(jù)寫(xiě)入ElasticSearch

    Python如何把Spark數(shù)據(jù)寫(xiě)入ElasticSearch

    這篇文章主要介紹了Python如何把Spark數(shù)據(jù)寫(xiě)入ElasticSearch,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 如何實(shí)現(xiàn)更換Jupyter Notebook內(nèi)核Python版本

    如何實(shí)現(xiàn)更換Jupyter Notebook內(nèi)核Python版本

    這篇文章主要介紹了如何實(shí)現(xiàn)更換Jupyter Notebook內(nèi)核Python版本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python錯(cuò)誤和異??偨Y(jié)詳細(xì)

    Python錯(cuò)誤和異??偨Y(jié)詳細(xì)

    本文詳細(xì)且清晰地講解了Python中錯(cuò)誤和異常的概念及其處理方式,通過(guò)具體案例展示try...except、try...finally、with...等句式的具體用法,期望能幫助到對(duì)此感到迷惑的初學(xué)者
    2021-10-10
  • opencv3/Python 稠密光流calcOpticalFlowFarneback詳解

    opencv3/Python 稠密光流calcOpticalFlowFarneback詳解

    今天小編就為大家分享一篇opencv3/Python 稠密光流calcOpticalFlowFarneback詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python解釋器pycharm安裝及環(huán)境變量配置教程圖文詳解

    python解釋器pycharm安裝及環(huán)境變量配置教程圖文詳解

    這篇文章主要介紹了python解釋器pycharm安裝及環(huán)境變量配置教程圖文詳解,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 關(guān)于Python中Math庫(kù)的使用

    關(guān)于Python中Math庫(kù)的使用

    這篇文章主要介紹了關(guān)于Python中Math庫(kù)的使用,math?庫(kù)是?Python?提供的內(nèi)置數(shù)學(xué)類函數(shù)庫(kù),因?yàn)閺?fù)數(shù)類型常用于科學(xué)計(jì)算,需要的朋友可以參考下
    2023-04-04
  • Python動(dòng)態(tài)加載模塊的3種方法

    Python動(dòng)態(tài)加載模塊的3種方法

    這篇文章主要介紹了Python 動(dòng)態(tài)加載模塊的3種方法,本文分別使用使用系統(tǒng)函數(shù)__import_()、使用imp 模塊、使用exec三種方法實(shí)現(xiàn),需要的朋友可以參考下
    2014-11-11
  • Python 讀取千萬(wàn)級(jí)數(shù)據(jù)自動(dòng)寫(xiě)入 MySQL 數(shù)據(jù)庫(kù)

    Python 讀取千萬(wàn)級(jí)數(shù)據(jù)自動(dòng)寫(xiě)入 MySQL 數(shù)據(jù)庫(kù)

    這篇文章主要介紹了Python 讀取千萬(wàn)級(jí)數(shù)據(jù)自動(dòng)寫(xiě)入 MySQL 數(shù)據(jù)庫(kù),本篇文章會(huì)給大家系統(tǒng)的分享千萬(wàn)級(jí)數(shù)據(jù)如何寫(xiě)入到 mysql,分為兩個(gè)場(chǎng)景,兩種方式
    2022-06-06
  • Python使用for生成列表實(shí)現(xiàn)過(guò)程解析

    Python使用for生成列表實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Python使用for生成列表實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔方法

    python jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔方法

    本篇文章主要介紹了python jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評(píng)論

新巴尔虎右旗| 嘉禾县| 岐山县| 达拉特旗| 平舆县| 广东省| 洞口县| 达州市| 南雄市| 长沙市| 衡水市| 西乌珠穆沁旗| 宜君县| 新安县| 定日县| 木兰县| 丹巴县| 伊宁县| 潞城市| 荣昌县| 红河县| 清徐县| 同江市| 琼海市| 延庆县| 扎兰屯市| 当阳市| 阳山县| 漳州市| 利川市| 海伦市| 慈溪市| 鄂托克旗| 抚顺县| 承德县| 台北市| 麦盖提县| 丰原市| 龙里县| 潍坊市| 伊金霍洛旗|