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