Python–模塊(Module)和包(Package)詳解
一、模塊的導入
1.什麼是模塊(module)
模塊就是Python文件,裡面定義瞭很多的函數、類、變量 一個完整大型的python程序是由模塊和包的形式組織起來的,可見模塊在python中的重要 性。
2.模塊有什麼作用
在python交互式解釋器中操作輸入的代碼,在退出python時是不會被保存的; 而模塊文 件中的代碼是永久存在的。
減少重復代碼, 減少工作量(寫的量、改的量)、代碼更優雅、拿來主義
3.模塊的分類
- 標準模塊(庫)
- 第三方模塊(庫)
- 自定義模塊
Python許多時候自己定義的函數,需要經常調用時;就可以自己定義一個模塊,將常用函數寫入模塊裡,下次使用常用函數時直接導入模塊,就可以使用函數瞭
4.什麼是包(package)
Python包實際上是一個目錄
包結構的目錄裡面可以有一個__init__.py模塊
py2與py3 的區別
py2:init.py是必須的
py3:init.py是可選的
模塊和包名要盡量和內置的模塊名不相同,不然會覆蓋內置的模塊
5.import/fromimport導入
6.使用名字導入
7.制作包與模塊
包pack01:one.py,two.py,three.py
包pack02:three.py
文件內容:print(“我是xxx.py”)
8.同一個模塊重復導入
當同一個模塊重復導入時,隻執行第一次
導入重名的模塊
兩個都會執行,當前生效的是後導入的模塊
重名的模塊,as取別名
9.相對導入
相對導入使用.或…來進行導入
相對導入隻能導入包中的模塊/子包
Python會自動識別一個目錄是不是包對於當前被執行的文件來說:
當前執行文件所在目錄不是一個包
子目錄及更深的目錄都是包
10.模塊查找順序
註意:不要跟Python內置的這些模塊重名
查找順序:
1.Python中所有加載到內存的模塊都放在sys.modules。當import一個模塊時首先會在這個列表中查找是否已經加載瞭此模塊,如果加載瞭則隻是將模塊的名字加入到正在調用import的模塊的Local名字空間中。如果沒有加載則從sys.path目錄中按照模塊名稱查找模塊文件
2.如果都沒有找到模塊名就報錯
二、Python下劃線
標識符是用來標識某種對象的名稱。以下劃線開頭的標識符是有特殊意義的。
1.制作包與模塊
包code:init.py,model.py,_model.py
文件內容:print(“我是xxx.py”)
包code:init.py,model.py,_model.py model.py
文件內容
2.下劃線的特殊含義(模塊)
以單下劃線開頭的(_foo)
表示保護對象,不能用from xxx import導入包/模塊以雙下劃線開頭的(__foo)
表示私有對象,不能用from xxx import導入包/模塊以雙下劃線開頭和結尾的(foo)
代表Python中特殊方法專用的標識,不建議用戶使用這種命名方式。
定義package中的__all__,用來模糊導入
導入一個package,就會首先調用該package的__init__.py文件,用來初始化模塊包
編寫Python代碼(不建議在__init__中寫python模塊,可以在包中在創建另外的模塊來寫,盡量保證__init__.py簡單)
內置屬性:name
當自己執行時,等於__name__的值為__main__
當被作為模塊導入,等於文件名(不包含後綴, 可含模塊名)
三.文件與模塊執行過程
- Python模塊導入執行的過程
- 通過sys.path環境變量找到模塊文件
- 編譯成字節碼文件(pyc文件)
- 如果字節碼過期瞭會自動重新生成
- 如果字節碼文件已存在則直接導入字節碼文件
- 執行模塊中的代碼來創建所定義的對象
四.模塊打包與發佈
1.如何分享模塊
如何我們寫瞭一個計算Fab第N項的函數,如何分享給別人呢?
拷貝? 導入問題?依賴問題?
2.如何使用別人的模塊
我們是如何使用第三方模塊的?
pip tar .gz
3.setuptools工具
Setuptools是一個給開發者構建和發佈python包的工具,特別是當包依賴於其他包時。
官方文檔:https://docs.python.org/3/distutils/examples.html
五.軟件目錄結構規范
1.定義目錄結構目的
- 可讀性高 不熟悉這個項目的代碼的人,一眼就能看懂目錄結構,知道程序啟動腳本是哪個,測試目錄在哪 兒,配置文件在哪兒等等。從而非常快速的瞭解這個項目。
- 可維護性、可擴展性好 定義好組織規則後,維護者就能很明確地知道,新增的哪個文件和代碼應該放在什麼目錄之下。這 個好處是,隨著時間的推移,代碼/配置的規模增加,項目結構不會混亂,仍然能夠組織良好。
2.軟件目錄結構規范
docs => 文檔
REMEME.txt
LICENSE
Data
3.如何用導入模塊與包
用相對導入的方式導入數據
六. 課後作業
總結
對於pyhton模塊命名空間作用域, 一定要註意成員變量的范圍
對於__name__屬性的使用, 防止代碼大量加載運行
對於模塊的導入的幾種方式要靈活去運用
Python模塊的打包
軟件目錄結構
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- python中的import語句用法大全
- 關於python中的setup.py
- 簡單談談Python中的模塊導入
- 詳解Python模塊化–模塊(Modules)和包(Packages)
- Python .py生成.pyd文件並打包.exe 的註意事項說明