目錄
- 一、模塊的導(dǎo)入
- 1.什么是模塊(module)
- 2.模塊有什么作用
- 3.模塊的分類
- 4.什么是包(package)
- 5.import/fromimport導(dǎo)入
- 6.使用名字導(dǎo)入
- 7.制作包與模塊
- 8.同一個模塊重復(fù)導(dǎo)入
- 9.相對導(dǎo)入
- 10.模塊查找順序
- 二、Python下劃線
- 三.文件與模塊執(zhí)行過程
- 四.模塊打包與發(fā)布
- 1.如何分享模塊
- 2.如何使用別人的模塊
- 3.setuptools工具
- 五.軟件目錄結(jié)構(gòu)規(guī)范
- 1.定義目錄結(jié)構(gòu)目的
- 2.軟件目錄結(jié)構(gòu)規(guī)范
- 3.如何用導(dǎo)入模塊與包
- 六. 課后作業(yè)
- 總結(jié)
一、模塊的導(dǎo)入
1.什么是模塊(module)
模塊就是Python文件,里面定義了很多的函數(shù)、類、變量 一個完整大型的python程序是由模塊和包的形式組織起來的,可見模塊在python中的重要 性。
2.模塊有什么作用
在python交互式解釋器中操作輸入的代碼,在退出python時是不會被保存的; 而模塊文 件中的代碼是永久存在的。
減少重復(fù)代碼, 減少工作量(寫的量、改的量)、代碼更優(yōu)雅、拿來主義
3.模塊的分類
- 標(biāo)準(zhǔn)模塊(庫)
- 第三方模塊(庫)
- 自定義模塊
Python許多時候自己定義的函數(shù),需要經(jīng)常調(diào)用時;就可以自己定義一個模塊,將常用函數(shù)寫入模塊里,下次使用常用函數(shù)時直接導(dǎo)入模塊,就可以使用函數(shù)了
4.什么是包(package)
Python包實際上是一個目錄
包結(jié)構(gòu)的目錄里面可以有一個__init__.py模塊
py2與py3 的區(qū)別
py2:init.py是必須的
py3:init.py是可選的
模塊和包名要盡量和內(nèi)置的模塊名不相同,不然會覆蓋內(nèi)置的模塊
5.import/fromimport導(dǎo)入
![](/d/20211017/d16b8b6c8d738a9c55dcb15d0f070bcc.gif)
6.使用名字導(dǎo)入
![](/d/20211017/90d2ca04cb9634eacb89977f2741e7f1.gif)
7.制作包與模塊
包pack01:one.py,two.py,three.py
包pack02:three.py
文件內(nèi)容:print(“我是xxx.py”)
![](/d/20211017/b97be36e4d9305b79823ddb22fb79748.gif)
8.同一個模塊重復(fù)導(dǎo)入
![](/d/20211017/25153d0adbdc5a14f405537bf28e7ed0.gif)
當(dāng)同一個模塊重復(fù)導(dǎo)入時,只執(zhí)行第一次
導(dǎo)入重名的模塊
![](/d/20211017/3c8575312083fa1b4d1ba1474c9aa59f.gif)
兩個都會執(zhí)行,當(dāng)前生效的是后導(dǎo)入的模塊
重名的模塊,as取別名
![](/d/20211017/9c279f4608d2de42bce693bd09a24c06.gif)
9.相對導(dǎo)入
相對導(dǎo)入使用.或…來進行導(dǎo)入
相對導(dǎo)入只能導(dǎo)入包中的模塊/子包
Python會自動識別一個目錄是不是包對于當(dāng)前被執(zhí)行的文件來說:
當(dāng)前執(zhí)行文件所在目錄不是一個包
子目錄及更深的目錄都是包
![](/d/20211017/650768e8b6df41a90186448547625800.gif)
10.模塊查找順序
注意:不要跟Python內(nèi)置的這些模塊重名
查找順序:
1.Python中所有加載到內(nèi)存的模塊都放在sys.modules。當(dāng)import一個模塊時首先會在這個列表中查找是否已經(jīng)加載了此模塊,如果加載了則只是將模塊的名字加入到正在調(diào)用import的模塊的Local名字空間中。如果沒有加載則從sys.path目錄中按照模塊名稱查找模塊文件
2.如果都沒有找到模塊名就報錯
二、Python下劃線
標(biāo)識符是用來標(biāo)識某種對象的名稱。以下劃線開頭的標(biāo)識符是有特殊意義的。
1.制作包與模塊
包code:init.py,model.py,_model.py
文件內(nèi)容:print(“我是xxx.py”)
![](/d/20211017/16efb79fbe6f9f4ef46376f8a5f646d0.gif)
包code:init.py,model.py,_model.py model.py
文件內(nèi)容
![](/d/20211017/1310c1418a601fd663791c0332b919e1.gif)
2.下劃線的特殊含義(模塊)
以單下劃線開頭的(_foo)
表示保護對象,不能用from xxx import導(dǎo)入包/模塊以雙下劃線開頭的(__foo)
表示私有對象,不能用from xxx import導(dǎo)入包/模塊以雙下劃線開頭和結(jié)尾的(foo)
代表Python中特殊方法專用的標(biāo)識,不建議用戶使用這種命名方式。
![](/d/20211017/10d1507d70300332f903687c137e1610.gif)
![](/d/20211017/6856bbe70a486beb9026e7d5d3a88286.gif)
![](/d/20211017/218572386c75850de7dae5d4f8c98c78.gif)
定義package中的__all__,用來模糊導(dǎo)入
導(dǎo)入一個package,就會首先調(diào)用該package的__init__.py文件,用來初始化模塊包
編寫Python代碼(不建議在__init__中寫python模塊,可以在包中在創(chuàng)建另外的模塊來寫,盡量保證__init__.py簡單)
內(nèi)置屬性:name
當(dāng)自己執(zhí)行時,等于__name__的值為__main__
當(dāng)被作為模塊導(dǎo)入,等于文件名(不包含后綴, 可含模塊名)
![](/d/20211017/f34b8e2c5caafba8ed7b06add8628474.gif)
![](/d/20211017/7ea7315c771539eae6203cd2cd67823d.gif)
![](/d/20211017/550b53f2020a415ccd54098071e5cc82.gif)
三.文件與模塊執(zhí)行過程
- Python模塊導(dǎo)入執(zhí)行的過程
- 通過sys.path環(huán)境變量找到模塊文件
- 編譯成字節(jié)碼文件(pyc文件)
- 如果字節(jié)碼過期了會自動重新生成
- 如果字節(jié)碼文件已存在則直接導(dǎo)入字節(jié)碼文件
- 執(zhí)行模塊中的代碼來創(chuàng)建所定義的對象
四.模塊打包與發(fā)布
1.如何分享模塊
如何我們寫了一個計算Fab第N項的函數(shù),如何分享給別人呢?
拷貝? 導(dǎo)入問題?依賴問題?
2.如何使用別人的模塊
我們是如何使用第三方模塊的?
pip tar .gz
3.setuptools工具
Setuptools是一個給開發(fā)者構(gòu)建和發(fā)布python包的工具,特別是當(dāng)包依賴于其他包時。
官方文檔:https://docs.python.org/3/distutils/examples.html
![](/d/20211017/1bf673113bdaf8e5eef9cb31f4a2cd32.gif)
![](/d/20211017/7e862cbfe3128ec361e84a89ab736513.gif)
![](/d/20211017/a2e56dd22fa0ff3d6ebc377d8299ffb6.gif)
![](/d/20211017/bffccf412efadabad113904b753abd7a.gif)
![](/d/20211017/79dd8c2f0adb7bf14172070bff7a9ac2.gif)
五.軟件目錄結(jié)構(gòu)規(guī)范
1.定義目錄結(jié)構(gòu)目的
- 可讀性高 不熟悉這個項目的代碼的人,一眼就能看懂目錄結(jié)構(gòu),知道程序啟動腳本是哪個,測試目錄在哪 兒,配置文件在哪兒等等。從而非常快速的了解這個項目。
- 可維護性、可擴展性好 定義好組織規(guī)則后,維護者就能很明確地知道,新增的哪個文件和代碼應(yīng)該放在什么目錄之下。這 個好處是,隨著時間的推移,代碼/配置的規(guī)模增加,項目結(jié)構(gòu)不會混亂,仍然能夠組織良好。
2.軟件目錄結(jié)構(gòu)規(guī)范
docs => 文檔
REMEME.txt
LICENSE
Data
![](/d/20211017/29c63ac369b382ecdc3abf7d81e9bfca.gif)
3.如何用導(dǎo)入模塊與包
用相對導(dǎo)入的方式導(dǎo)入數(shù)據(jù)
![](/d/20211017/1d1e951a154a4068177d25ec45460bfe.gif)
六. 課后作業(yè)
![](/d/20211017/d59fdadf6ac53e875b85c6a02fe6b378.gif)
![](/d/20211017/030e88de087f477121d09cfc897f4bfe.gif)
總結(jié)
對于pyhton模塊命名空間作用域, 一定要注意成員變量的范圍
對于__name__屬性的使用, 防止代碼大量加載運行
對于模塊的導(dǎo)入的幾種方式要靈活去運用
Python模塊的打包
軟件目錄結(jié)構(gòu)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
您可能感興趣的文章:- 五分鐘學(xué)會Python 模塊和包、文件
- Python如何將模塊打包并發(fā)布
- python 制作python包,封裝成可用模塊教程
- Python包和模塊的分發(fā)詳細(xì)介紹
- Python安裝依賴(包)模塊方法詳解