python中from import的使用解讀
python中from import的使用
無(wú)論是使用python還是c/c++開(kāi)發(fā)代碼時(shí),不可避免的要使用到標(biāo)準(zhǔn)庫(kù)或者第三方庫(kù),這個(gè)時(shí)候就需要在我們的py文件中調(diào)用庫(kù),而在python中一般是通過(guò)from和import的組合來(lái)實(shí)現(xiàn)加載第三方庫(kù)包中的模塊或者對(duì)象。
首先把自己對(duì)from和import的使用總結(jié)列出,后面再一一進(jìn)行列舉。
先強(qiáng)調(diào)兩個(gè)概念
- 模塊,一般而言就是一個(gè)獨(dú)立的py文件,一個(gè)模塊就是一個(gè)py文件,該模塊中可以定義類、方法、變量、常量、函數(shù)等。
- 對(duì)象,在python一切皆對(duì)象,字符串,數(shù)字、元組、字典、函數(shù)、類、方法、模塊等都可以稱為對(duì)象,在本文中對(duì)象特指函數(shù)、變量、方法等(不指向模塊)。
對(duì)上面的兩個(gè)概念有了深入的認(rèn)識(shí),下面把原則列出。
- import是導(dǎo)入的含義,在python中通過(guò)這個(gè)關(guān)鍵字可以導(dǎo)入模塊,也可以導(dǎo)入模塊中的對(duì)象(一般指函數(shù)、方法、類、變量等),但是需要注意的是import不能導(dǎo)入包。
- from關(guān)鍵字可以修飾模塊名稱,也可以修改包的名稱,修飾模塊名稱,則import導(dǎo)入的是對(duì)象名稱;from關(guān)鍵字修飾包名稱,后接的import修飾的是模塊名稱。
使用方法如下
import module_name from package_name import module_name from module_name import object_name1 object_name2 ... from package_name.module_name import object_name1 object_name2 ...
導(dǎo)入模塊的示例
import re import sys
上面的語(yǔ)句就是導(dǎo)入re模塊和sys模塊。通過(guò)這種方式可以導(dǎo)入所有在搜索路徑(sys.path)中的模塊。
上面的用法很常用,也是我們經(jīng)常使用的。
下面介紹第二種,即加載一個(gè)模塊下的一個(gè)或者多個(gè)對(duì)象,示例如下:
from module_name import object_name1 ojbecct_name2
上面的介紹中module_name特指模塊名稱,而object_name1、object_name2一般指模塊中的變量、函數(shù)、方法、類等。
即我們可以通過(guò)from+import的方式記載一個(gè)模塊的中指定的函數(shù)、方法或者變量。
- 這樣做的好處是可以減少內(nèi)存使用,只加載一個(gè)對(duì)象與加載模塊中所有對(duì)象,對(duì)內(nèi)存的消耗還是不一樣的;
- 劣勢(shì)是如果調(diào)用模塊僅使用被調(diào)用模塊一個(gè)對(duì)象或者很少的幾個(gè)對(duì)象,則此種方法可行,但是如果調(diào)用模塊使用了很多的被調(diào)用模塊的下對(duì)象,此種使用方法就不太友好,因?yàn)橐槍?duì)每個(gè)對(duì)象添加一句上文中的語(yǔ)句。
具體如何使用請(qǐng)根據(jù)實(shí)際情況進(jìn)行分析。
一個(gè)具體的例子
from re import search search(xxxx,xxx) #如果不使用此種方式,那么必須按照如下方式使用 import re re.search(xxxx, xxx)
通過(guò)上面具體的例子,可以看出區(qū)別了吧。
如果通過(guò)import導(dǎo)入了對(duì)象,那么在代碼中使用該對(duì)象時(shí)可以直接使用對(duì)象名稱,而無(wú)需使用模塊前綴,即search;如果僅導(dǎo)入了模塊,那么在使用時(shí)一定要加入前綴,即re.search。
總結(jié)
無(wú)論是使用import
還是from import
,第一個(gè)要求是代碼能夠正常運(yùn)行,其次,根據(jù)代碼維護(hù)性,團(tuán)隊(duì)編碼風(fēng)格來(lái)確定選擇哪一種方案。
如果我們只會(huì)使用到某個(gè)模塊下面的一個(gè)函數(shù)(或者常量、類)并且名字不會(huì)產(chǎn)生混淆,可識(shí)別性高,那么from 模塊名 import 函數(shù)名
這沒(méi)有什么問(wèn)題。
如果我們會(huì)用到一個(gè)模塊下面的多個(gè)函數(shù),或者是我們將要使用的函數(shù)名、常量名、類名可能會(huì)讓人產(chǎn)生混淆(例如 re.S、re.I),那么這種情況下,import 模塊名
然后再 模塊名.xxx
來(lái)調(diào)用會(huì)讓代碼更加清晰,更好維護(hù)。
但無(wú)論什么情況下,都禁止使用from xxx import *
這種寫(xiě)法,它會(huì)給你帶來(lái)無(wú)窮無(wú)盡的噩夢(mèng)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python使用openCV遍歷文件夾里所有視頻文件并保存成圖片
這篇文章主要介紹了python使用openCV遍歷文件夾里所有視頻文件并保存成圖片,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-01-01Python無(wú)法用requests獲取網(wǎng)頁(yè)源碼的解決方法
爬蟲(chóng)獲取信息,很多時(shí)候是需要從網(wǎng)頁(yè)源碼中獲取鏈接信息的,下面這篇文章主要給大家介紹了關(guān)于Python無(wú)法用requests獲取網(wǎng)頁(yè)源碼的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07使用Django啟動(dòng)命令行及執(zhí)行腳本的方法
今天小編就為大家分享一篇使用Django啟動(dòng)命令行及執(zhí)行腳本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05基于Python3讀寫(xiě)INI配置文件過(guò)程解析
這篇文章主要介紹了基于Python3讀寫(xiě)INI配置文件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07python的print輸出在控制臺(tái)并且將輸出內(nèi)容保存為文件(最新推薦)
這篇文章主要介紹了python的print輸出在控制臺(tái)并且將輸出內(nèi)容保存為文件,我感覺(jué)就是類似于重寫(xiě)一下調(diào)用print的時(shí)候執(zhí)行的方法,讓他既能夠在控制臺(tái)輸出,也能保存到文件里去,需要的朋友可以參考下2023-01-01Python實(shí)現(xiàn)在Word中創(chuàng)建,讀取和刪除列表詳解
在Word中,列表是一種用于組織和呈現(xiàn)信息的有效工具,這篇文章將探討一下如何使用Python在Word文檔中創(chuàng)建,讀取和刪除列表,需要的可以了解下2025-03-03Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作
這篇文章主要為大家介紹了Python數(shù)據(jù)處理利器Pandas?DataFrame,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06pytorch中的nn.Unfold()函數(shù)和fold()函數(shù)解讀
這篇文章主要介紹了pytorch中的nn.Unfold()函數(shù)和fold()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08