1.什么是模塊
- 在python中一個(gè)py文件就是一個(gè)模塊背亥,模塊也有封裝效果
a.系統(tǒng)模塊(標(biāo)準(zhǔn)庫(kù)) - python系統(tǒng)提供的模塊(安裝解析器的時(shí)候已經(jīng)導(dǎo)入到解釋器中了一屋,使用的時(shí)候在代碼中直接導(dǎo)入)
random模塊 - 提供隨機(jī)數(shù)
math模塊 - 提供數(shù)學(xué)運(yùn)算
json庫(kù) - 提供json數(shù)據(jù)相關(guān)操作
re模塊 - 提供正則表達(dá)式相關(guān)操作
socket模塊 - 提供python套接字編程(網(wǎng)絡(luò)通信)
time模塊 - 提供和時(shí)間相關(guān)的操作
threading模塊 - 提供和線程相關(guān)的操作
...
b.自定義模塊 - 程序員自己寫(xiě)的模塊(py文件)
自己寫(xiě)的模塊
別人寫(xiě)的模塊 - 第三方庫(kù)(要自行下載)
標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)一般是通過(guò)模塊提供變量洛口、函數(shù)影兽、類(lèi)
2. 怎么使用模塊
- import 模塊名 -> 在程序中直接導(dǎo)入指定的模塊策精,導(dǎo)入后可以使用模塊中所有的全局變量(包含了變量舰始、函數(shù)和類(lèi))
導(dǎo)入后通過(guò)"模塊名.變量"來(lái)使用模塊中的內(nèi)容,可以避免和自己的內(nèi)容產(chǎn)生歧義
- from 模塊名 import 變量1咽袜, 變量2丸卷, -> 在程序中導(dǎo)入指定的模塊,導(dǎo)入后只能使用import 后面的變量
導(dǎo)入后直接使用變量酬蹋,不用在前面加'模塊名.'及老。
- from 模塊名 import * -> 使用*號(hào)導(dǎo)入所有的全局變量
重點(diǎn) - 導(dǎo)入模塊的本質(zhì),實(shí)質(zhì)會(huì)進(jìn)入模塊里執(zhí)行一遍所有的代碼范抓,當(dāng)import或from import 模塊時(shí)骄恶,會(huì)執(zhí)行模塊中的代碼,在哪個(gè)地方寫(xiě)的import就在哪里執(zhí)行
- 若一個(gè)模塊導(dǎo)入多次匕垫,只會(huì)導(dǎo)入一次僧鲁,不會(huì)重復(fù)導(dǎo)入,不會(huì)重復(fù)執(zhí)行代碼,會(huì)檢查是否已經(jīng)導(dǎo)入(import與from import)
4. 怎么阻止模塊中的內(nèi)容被其他模塊執(zhí)行
在module中寞秃,寫(xiě)入if __name__ == '__main__'里面的代碼不會(huì)被import執(zhí)行
一般函數(shù)聲明會(huì)放在if的外面斟叼,其他放在if里面
不希望被其他模塊執(zhí)行的代碼放在if語(yǔ)句中,如果希望被其他模塊使用的代碼就放在if語(yǔ)句的外面
原理:
每一個(gè)模塊都有一個(gè)__name__屬性春寿,所有的py文件都有這個(gè)屬性朗涩,代表當(dāng)前模塊的模塊名,默認(rèn)情況下它的值是py文件名绑改。
當(dāng)當(dāng)前模塊正在被執(zhí)行的時(shí)候(直接執(zhí)行的時(shí)候)的時(shí)候谢床,模塊實(shí)現(xiàn)__name__會(huì)變成‘__main__'
5. 導(dǎo)入模塊的時(shí)候,可以對(duì)導(dǎo)入的模塊或模塊中的內(nèi)容重命名
對(duì)模塊重命名 import 模塊名 as 新模塊名
對(duì)模塊中的內(nèi)容命名 from 模塊名 import 內(nèi)容名 as 新內(nèi)容名
*通配符不能重新命名