Python 靜態(tài)導(dǎo)入與動(dòng)態(tài)導(dǎo)入的實(shí)現(xiàn)示例
1.靜態(tài)導(dǎo)入
靜態(tài)導(dǎo)入是指在代碼的頂部或模塊開始部分顯式地寫出導(dǎo)入語(yǔ)句。模塊名在編寫代碼時(shí)就已經(jīng)確定了,并且在解釋器運(yùn)行到該語(yǔ)句時(shí)立即進(jìn)行導(dǎo)入。這是最常用的導(dǎo)入方法。
import math print(math.sqrt(9))
靜態(tài)導(dǎo)入方式有部分導(dǎo)入、別名導(dǎo)入、相對(duì)導(dǎo)入、導(dǎo)入所有內(nèi)容等。
#部分導(dǎo)入: from math import sqrt, pi #別名導(dǎo)入 import math as mt #相對(duì)導(dǎo)入 (導(dǎo)入上一層目錄中的模塊) from .. import module1 #導(dǎo)入所有內(nèi)容 from math import *
2.動(dòng)態(tài)導(dǎo)入
動(dòng)態(tài)導(dǎo)入(運(yùn)行時(shí)導(dǎo)入)是指在程序運(yùn)行的過(guò)程中,根據(jù)某些條件動(dòng)態(tài)決定導(dǎo)入哪個(gè)模塊。這種方式使用的是 Python 提供的importlib模塊,可以讓程序在運(yùn)行時(shí)決定導(dǎo)入哪個(gè)模塊。
動(dòng)態(tài)導(dǎo)入的模塊名稱可以是變量(如下方module_name),可以根據(jù)不同的條件動(dòng)態(tài)變化。
import importlib module_name = "math" math_module = importlib.import_module(module_name) print(math_module.sqrt(9))
除了使用importlib進(jìn)行動(dòng)態(tài)導(dǎo)入,還有條件導(dǎo)入、延遲導(dǎo)入、通過(guò)_import_導(dǎo)入等。
#條件導(dǎo)入,通常用于處理可選依賴或兼容性問(wèn)題 try: import cPickle as pickle except ImportError: import pickle #延遲導(dǎo)入,在函數(shù)或方法內(nèi)部導(dǎo)入模塊??梢詼p少程序啟動(dòng)時(shí)的開銷,適用模塊很大且在特定情況下使用時(shí)。 def complex_function(): import math return math.sqrt(9) print(complex_function()) #通過(guò)__import__導(dǎo)入,一個(gè)內(nèi)置函數(shù),以更底層的方式導(dǎo)入模塊 module_name = "math" math_module = __import__(module_name) print(math_module.sqrt(9))
3.性能與使用場(chǎng)景對(duì)比
性能:
靜態(tài)導(dǎo)入:所有導(dǎo)入都在程序開始時(shí)完成,導(dǎo)入過(guò)程一次性完成,性能開銷低,也可以減少運(yùn)行延遲。
動(dòng)態(tài)導(dǎo)入:每次動(dòng)態(tài)導(dǎo)入都需要進(jìn)行模塊的查找和加載,可能會(huì)增加一些性能開銷以及運(yùn)行時(shí)延遲;模塊在實(shí)際需要時(shí)才導(dǎo)入,可以減少啟動(dòng)時(shí)間和內(nèi)存占用。
使用場(chǎng)景:
靜態(tài)導(dǎo)入:明確知道需要哪些模塊時(shí),以及需要高性能、低延遲的場(chǎng)景。
動(dòng)態(tài)導(dǎo)入:需要高靈活性和動(dòng)態(tài)行為時(shí),如插件系統(tǒng)、動(dòng)態(tài)配置系統(tǒng)、根據(jù)用戶輸入選擇不同功能等場(chǎng)景。例如一個(gè)插件系統(tǒng),不同的插件名稱是在運(yùn)行時(shí)由用戶輸入的:
import importlib def load_plugin(plugin_name): try: plugin_module = importlib.import_module(plugin_name) plugin_module.run() except ImportError: print(f"Error! Plugin {plugin_name} not found.") plugin_name = input("Please enter the plugin name: ") load_plugin(plugin_name)
到此這篇關(guān)于Python 靜態(tài)導(dǎo)入與動(dòng)態(tài)導(dǎo)入的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python 靜態(tài)導(dǎo)入與動(dòng)態(tài)導(dǎo)入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python?動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)模塊熱更新的方法
- Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼
- Python動(dòng)態(tài)導(dǎo)入模塊:__import__、importlib、動(dòng)態(tài)導(dǎo)入的使用場(chǎng)景實(shí)例分析
- Python動(dòng)態(tài)導(dǎo)入模塊和反射機(jī)制詳解
- Python 動(dòng)態(tài)導(dǎo)入對(duì)象,importlib.import_module()的使用方法
- Python動(dòng)態(tài)導(dǎo)入模塊的方法實(shí)例分析
相關(guān)文章
python中sql解析庫(kù)sqlparse基本操作指南
sqlparse是用于Python的非驗(yàn)證SQL解析器,它提供了對(duì)SQL語(yǔ)句的解析,拆分和格式化的支持,這篇文章主要給大家介紹了關(guān)于python中sql解析庫(kù)sqlparse基本操作指南的相關(guān)資料,需要的朋友可以參考下2024-08-08Pytorch中torch.repeat_interleave()函數(shù)使用及說(shuō)明
這篇文章主要介紹了Pytorch中torch.repeat_interleave()函數(shù)使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Django forms表單 select下拉框的傳值實(shí)例
今天小編就為大家分享一篇Django forms表單 select下拉框的傳值實(shí)例。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07pycharm?console?打印中文為亂碼問(wèn)題及解決
這篇文章主要介紹了pycharm?console?打印中文為亂碼問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11解決Pyinstaller 打包exe文件 取消dos窗口(黑框框)的問(wèn)題
今天小編就為大家分享一篇解決Pyinstaller 打包exe文件 取消dos窗口(黑框框)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06解決Jupyter因卸載重裝導(dǎo)致的問(wèn)題修復(fù)
這篇文章主要介紹了解決Jupyter因卸載重裝導(dǎo)致的問(wèn)題修復(fù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python中zip()函數(shù)用法實(shí)例教程
這篇文章主要介紹了Python中zip()函數(shù)用法實(shí)例教程,對(duì)Python初學(xué)者有一定的借鑒價(jià)值,需要的朋友可以參考下2014-07-07Python利用正則表達(dá)式實(shí)現(xiàn)計(jì)算器算法思路解析
這篇文章主要介紹了Python利用正則表達(dá)式實(shí)現(xiàn)計(jì)算器算法思路解析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-04-04django Model層常用驗(yàn)證器及自定義驗(yàn)證器詳解
這篇文章主要介紹了django Model層常用驗(yàn)證器及自定義驗(yàn)證器詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07