模塊和包
模塊
一個模塊就是一個包含python代碼的文件语淘。一個文件就是一個模塊
為什么要使用模塊镀钓?
1.現(xiàn)在程序開發(fā)文件比較大冤竹,都放在一個文件中維護(hù)不方便财饥,拆分成多個文件方便維護(hù)與管理
2.模塊可以增加代碼的重用率
3.模塊可以當(dāng)作命名空間
如何定義自己的模塊
模塊本身就是一個文件落竹,所有py代碼都可以在文件中直接書寫。不過我們開發(fā)共用模塊時剪况,最好在模塊中書寫以下內(nèi)容教沾。
變量(模塊中的屬性值)
函數(shù)(單獨(dú)的功能)
類(相似功能組合)
模塊測試代碼(臨時使用,被導(dǎo)入時不會執(zhí)行)
測試代碼:
測試代碼經(jīng)常在開發(fā)模塊時用于測試模塊的功能译断,但是測試代碼僅在開發(fā)和測試時使用授翻,被當(dāng)作模塊導(dǎo)入時不希望測試代碼運(yùn)行。需要使用name特殊變量來操作镐作。
if __name__ == '__main__':
測試代碼區(qū)域(僅在吧當(dāng)前文件直接運(yùn)行時才會執(zhí)行測試代碼藏姐,當(dāng)作模塊導(dǎo)入時則不會執(zhí)行)
__name__ 在直接運(yùn)行當(dāng)前文件時,結(jié)果為__main__
__name__ 被當(dāng)作模塊導(dǎo)入文件時该贾,結(jié)果為 模塊名稱
模塊的導(dǎo)入方式
import 模塊 直接導(dǎo)入模塊
使用方法:
模塊名.變量名
模塊名.函數(shù)名
模塊名.類名.方法名()
模塊名.類名.屬性名
import 模塊 as 別名 直接導(dǎo)入模塊羔杨,并且為模塊起一個別名‘
使用方法:
別名.變量名
別名.函數(shù)名
別名.類名.方法名()
別名.類名.屬性名
from 模塊 import 某個函數(shù)或者類 直接導(dǎo)入模塊中的某個方法或者某個類或變量
使用方法:
函數(shù)名()
變量名
類名.方法名()
屬性名
from 模塊 import 函數(shù),函數(shù),類,類... 直接導(dǎo)入模塊中的多個方法和多個類和變量
使用方法:
函數(shù)名()
變量名
類名.方法名()
屬性名
from 模塊 import * 直接導(dǎo)入模塊中的所有方法和類和變量
使用方法:
函數(shù)名()
變量名
類名.方法名()
屬性名
注意事項(xiàng):如果采用from 導(dǎo)入的方式要確保模塊中的函數(shù)變量等內(nèi)容不能與系統(tǒng)的內(nèi)置函數(shù)同名杨蛋,否則會出現(xiàn)異常兜材。
模塊的存放
如果不想自己新建自定義的模塊文件夾,可以將我們自定義的模塊存放到 python目錄中的\Lib\site-packages中逞力。
搜索路徑就是python在加載模塊時候的查找路徑
1.獲取當(dāng)前模塊的搜索路徑
import sys
sys.path 獲取當(dāng)前搜索路徑的列表
2.將自定義的路徑添加到列表中
sys.path.append(自定義路徑)
模塊的加載順序
導(dǎo)入模塊操作的步驟:
1.檢測內(nèi)存中是否已經(jīng)加載過當(dāng)前模塊曙寡,如果加載過,直接使用加載的模塊
2.如果內(nèi)存中沒有加載當(dāng)前模塊寇荧,則搜索python的內(nèi)置模塊
3.如果當(dāng)前內(nèi)置模塊中中沒有該模塊举庶,根據(jù)搜索路徑查找并且加載模塊
包
包就是文件夾,他用于存放文件也就是模塊揩抡。包中也可以存放包
包的結(jié)構(gòu)
包
|---- __init__.py 包的標(biāo)志文件
|---- 模塊1
|---- 模塊2
|---- 子包(文件夾)
|-----|----__init__.py
|---- |----子模塊1
|---- |----子模塊2
包的導(dǎo)入和使用
import 包.模塊
使用方法:
包.模塊.變量名
包.模塊.函數(shù)名()
包.模塊.類名.屬性名
包.模塊.類名.方法名()
import 包.模塊 as 別名
使用方法:
別名.變量名
別名.函數(shù)名()
別名.類名.屬性名
別名.類名.方法名()
from 包.模塊 import 函數(shù)或者類或者屬性
使用方法:
變量名
函數(shù)名()
類名.屬性名
類名.方法名()
from 包.模塊 import *
使用方法:
變量名
函數(shù)名()
類名.屬性名
類名.方法名()
在init.py文件中添加內(nèi)容(當(dāng)模塊用)
在此情況下可以將包當(dāng)作模塊直接導(dǎo)入使用
import 包
使用:
包.變量名
包.函數(shù)名()
包.類名.屬性名
包.類名.方法名()
import 包 as 別名
使用:
別名.變量名
別名.函數(shù)名()
別名.類名.屬性名
別名.類名.方法名()
from 包 import 函數(shù),類户侥,變量
使用:
變量名
函數(shù)名()
類名.屬性名
類名.方法名()
from 包 import *
使用:
變量名
函數(shù)名()
類名.屬性名
類名.方法名()
包和模塊的互相調(diào)用問題
如果在當(dāng)前模塊中需要調(diào)用其他模塊或者包的內(nèi)容時镀琉,可以直接使用import 導(dǎo)入對應(yīng)的包和模塊,就可以加載進(jìn)來使用蕊唐,import 會搜索包和模塊對應(yīng)的搜索路徑(sys.path)
import 模塊或者包
all特殊變量的用法
1.在init.py文件中屋摔,如果沒有all變量,那么使用from 包 import * 僅導(dǎo)入init.py中定義的方法和類及其他內(nèi)容
2.在init.py文件中替梨,如果定義all變量钓试,那么使用from 包 import * 則會導(dǎo)入all指定的所有模塊,而忽略init.py文件中的信息
__all__ = ['模塊','模塊','子包'副瀑。弓熏。。] 必須是列表