day06 1 module模組和包介紹

2022-08-18 19:27:11 字數 3244 閱讀 5848

為了編寫可維護的**,我們把很多函式分組,分別放到不同的檔案裡,這樣每個檔案包含的**就相對較少,很多程式語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。

使用模組最大的好處是提高了**的可維護性;其次,提高了**開發的效率,編寫**不必從零開始,當乙個模組編寫完成,就可以被其他地方引用,同時,我們在編寫程式的時候,也可以引用其他模組,包括python內建的模組和來自第三方的模組。

所以,模組總共有三種:

此外,使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,在我們自己編寫模組時,不必考慮函式或變數命名是否與其他模組中命名重複。但是也要注意,自定義函式或變數的命名盡量不要與內建函式名衝突。

1 x = 111

2 y = 222

3 4 importsys

5 obj = sys.modules[__name__]

6 print(getattr(obj,'x'))

1 #cal.py檔案內容

2 3 defadd(x, y):

4 return x+y

1 #bin.py檔案中匯入方法1

2 3 importcal

4 print(cal.add(2,9))

1 #bin.py檔案中匯入方法2

2 3 from cal importadd

4 print(add(2,9))

1 #bin.py檔案中匯入方法3

2 3 from cal import *

4 print(add(2,9))

注:import語句匯入檔案時,從執行檔案所在的目錄處開始搜尋目標檔案

1 #cals.test.py檔案內容

2 3 defadd(x,y):

4 return x+y

1 #cals.main.py檔案內容

2 3 from cals import test #模組匯入時頂層路徑以執行檔案所在的路徑為參考

4 defrun(x,y):

5 print(test.add(x,y))

1 #bin.py檔案中匯入方法

1 #cals.test.py檔案內容

2 3 defadd(x,y):

4 return x+y

5 defmultiply(x,y):

6 return x*y

1 #bin.py檔案中動態匯入方法1

2 3 module_t=__import__('cals.test')

4 print(module_t.test.add(2,9)) #通過匯入方法1,可以獲取得到頂層模組的記憶體位址

5 print(module_t.test.multiply(2,11))

1 #bin.py檔案中動態匯入方法2

2 3 importimportlib

4 module_t=importlib.import_module('cals.test')

5 print(module_t.add(2,9)) #通過匯入方法2,可以直接獲取得到底層模組的記憶體位址

6 print(module_t.multiply(2,11))

為了避免模組名衝突,python又引入了按目錄組織模組的方法,稱為包(package)。比如,乙個abc.py的檔案就是乙個名字叫abc的模組,乙個xyz.py的檔案就是乙個名字叫xyz的模組,在當abc模組與xyz模組與系統已有的其他模組命名衝突時,我們就可以通過包來組織模組。

引入了包以後,只要頂層的包名不產生衝突,那麼位於不同包檔案內部的模組之間就不會有命名衝突。

請注意,每個包檔案中都包含乙個__init__.py檔案,這個檔案是要求必須存在的,否則,python就會把這個檔案當成普通檔案(資料夾)來處理,會丟失包的所有屬性。__init__.py可以是空檔案,也可以有python**,因為__init__.py本身就是乙個模組,而它的模組名就是對應的包的名字。

包的匯入同模組的匯入方法相同,執行檔案與待匯入包的檔案路徑如下。

1 #web1.web2.web3.cal.py中檔案內容

2 3 defadd(x,y):

4 return x+y

1 #bin.py檔案中匯入方法

2 3 from web1.web2.web3 importcal

4 print(cal.add(2,9))

1 #bin.py檔案中匯入方法

2 3 from web1.web2.web3.cal importadd

4 print(add(2,9))

在執行檔案中,__name__='__main__';

在被匯入檔案中,__name__='所在檔案路徑'。

1 #檢視包含bin.py檔案的檔案路徑

2 3 importos

4 print(os.path.abspath(__file__))

5 6 """

7 執行結果:

8 h:\mypython\my_module\bin.py

9 """

1 #檢視包含bin.py檔案的上層目錄

2 3 importos

4 print(os.path.dirname(__file__))

5 6 """

7 執行結果:

8 h:/mypython/my_module

9 """  

15 模組 Module 和 包 package

模組是乙個包含有一系列資料,函式,類等組成的程式組 模組是乙個檔案,模組檔名通常以 py 結尾 讓一些相關的資料,函式,類等有邏輯的組織在一起,使邏輯結構更加清晰,我們可以使用模組將大型程式分解為可管理的小型檔案,方便管理和應用。模組中的變數,函式和類等可提供給其他模組或程式使用,重用性強。內建模組...

Model模型和Module模組的區別

資料是從網上找的,具體是誰最先寫的,不清楚了。model通常是指模型。這個模型也許是你需求分析出來的,也許是你演算法做出來的。不過最大可能是mvc的 或者是gui開發模式中的m裡的那個模型。所以什麼時候用model取決於你要做什麼。以前你打算花長時間做。如果做很短的專案可以不用model。如果超過1...

Python隨心記 module模組和包

import sysprint sys.path 列印python直譯器的路由 新增路徑 臨時修改 module模組和包 packge,該檔案下有個 init py檔案 import module module 引入模組 模組一共三種 python標準庫模組 第三方模組 應用程式自定義模組 引入自定...