python中from import的使用解讀
python中from import的使用
無論是使用python還是c/c++開發(fā)代碼時,不可避免的要使用到標準庫或者第三方庫,這個時候就需要在我們的py文件中調用庫,而在python中一般是通過from和import的組合來實現加載第三方庫包中的模塊或者對象。
首先把自己對from和import的使用總結列出,后面再一一進行列舉。
先強調兩個概念
- 模塊,一般而言就是一個獨立的py文件,一個模塊就是一個py文件,該模塊中可以定義類、方法、變量、常量、函數等。
- 對象,在python一切皆對象,字符串,數字、元組、字典、函數、類、方法、模塊等都可以稱為對象,在本文中對象特指函數、變量、方法等(不指向模塊)。
對上面的兩個概念有了深入的認識,下面把原則列出。
- import是導入的含義,在python中通過這個關鍵字可以導入模塊,也可以導入模塊中的對象(一般指函數、方法、類、變量等),但是需要注意的是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)中的模塊。
上面的用法很常用,也是我們經常使用的。
下面介紹第二種,即加載一個模塊下的一個或者多個對象,示例如下:
from module_name import object_name1 ojbecct_name2
上面的介紹中module_name特指模塊名稱,而object_name1、object_name2一般指模塊中的變量、函數、方法、類等。
即我們可以通過from+import的方式記載一個模塊的中指定的函數、方法或者變量。
- 這樣做的好處是可以減少內存使用,只加載一個對象與加載模塊中所有對象,對內存的消耗還是不一樣的;
- 劣勢是如果調用模塊僅使用被調用模塊一個對象或者很少的幾個對象,則此種方法可行,但是如果調用模塊使用了很多的被調用模塊的下對象,此種使用方法就不太友好,因為要針對每個對象添加一句上文中的語句。
具體如何使用請根據實際情況進行分析。
一個具體的例子
from re import search search(xxxx,xxx) #如果不使用此種方式,那么必須按照如下方式使用 import re re.search(xxxx, xxx)
通過上面具體的例子,可以看出區(qū)別了吧。
如果通過import導入了對象,那么在代碼中使用該對象時可以直接使用對象名稱,而無需使用模塊前綴,即search;如果僅導入了模塊,那么在使用時一定要加入前綴,即re.search。
總結
無論是使用import還是from import,第一個要求是代碼能夠正常運行,其次,根據代碼維護性,團隊編碼風格來確定選擇哪一種方案。
如果我們只會使用到某個模塊下面的一個函數(或者常量、類)并且名字不會產生混淆,可識別性高,那么from 模塊名 import 函數名這沒有什么問題。
如果我們會用到一個模塊下面的多個函數,或者是我們將要使用的函數名、常量名、類名可能會讓人產生混淆(例如 re.S、re.I),那么這種情況下,import 模塊名然后再 模塊名.xxx來調用會讓代碼更加清晰,更好維護。
但無論什么情況下,都禁止使用from xxx import *這種寫法,它會給你帶來無窮無盡的噩夢。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python面向對象程序設計OOP深入分析【構造函數,組合類,工具類等】
這篇文章主要介紹了Python面向對象程序設計OOP,較為詳細的深入分析了Python面向對象的構造函數,組合類,工具類等相關概念、使用方法及操作注意事項,需要的朋友可以參考下2019-01-01

