首頁 > 軟體

Python--模組(Module)和包(Package)詳解

2021-09-07 16:01:59

一、模組的匯入

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模組的打包

軟體目錄結構

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!


IT145.com E-mail:sddin#qq.com