標籤:檔案夾 就會 關鍵字 ase 避免 引用 程式 檔案 搜尋
模組與包
一、模組
1、模組是怎麼誕生的。
在電腦程式的開發過程中,隨著程式碼越寫越多,在一個檔案裡代碼就會越來越長,越來越不容易維護。為了編寫可維護的代碼,我們把很多函數分組,分別放到 不同的檔案裡,這樣,每個檔案包含的代碼就相對較少,很多程式設計語言都採用這種組織代碼的方式。在Python中,一個.py檔案就稱之為一個模組(Module)。
2、模組的作用。
提高了代碼的可維護性。其次是編寫代碼不必從零開始。當一個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括Python內建的模組和來自第三方的模組。另外,使用模組還可以避免函數名和變數名衝突。相同名字的函數和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函數名字衝突。
3、模組的分類
1.系統內建模組,即python標準庫
2.第三方模組,即他人編寫好了的模組,直接下載下來用就可以了(scary,requests等)
3.應用程式自訂模組,即編程人員自己編寫的模組。
4、模組的匯入方式。
1.import 語句
格式:import 模組名
注釋:模組匯入時如果是內建模組會直接被匯入,如果是第三方模組或者是自訂模組則會根據sys.path所給的路徑進行尋找。
一個模組可以在當前位置import多次,但只有第一次匯入會執行源檔案內的代碼,原因是:第一次匯入就會將模組包含的內容統統載入到
記憶體了,以後在當前檔案位置的匯入都是指向記憶體中已有的模組
2.from…import 語句
格式:import 模組名 import 變數名
注釋:這個聲明不會把整個modulename模組匯入到當前的命名空間中,只會將它裡面的變數名單個引入到執行這個聲明的模組的全域符號表。
3.補充.
當import一個模組時,首先會立刻建立一個新的名稱空間,用來存放該模組中定義的所有變數的名字;然後會在該名稱空間內執行foo.py內所有的代碼,
最後需要知道的是import關鍵字就是定義了一個名字,只不過此刻我們用import定義的是一個模組名字foo,該名字就是指向foo.py的名稱空間,而foo.的方式
就是從該名稱空間裡找名字,可以使用foo.__dict__來查看這些名字。
注釋:import的兩個過程: 建立新的名稱空間 {名字:對象和}執行被調用的模組 (第二次不會被執行)。
二、包
1、為什麼會有包。
如果不同的人編寫的模組名相同怎麼辦?為了避免模組名衝突,Python又引入了按目錄來組織模組的方法,稱為包(Package),引入了包以後,只要頂層的包
名不與別人衝突,那所有模組都不會與別人衝突。
2、什麼是包?
包的作用和檔案夾的作用相同,只不過與檔案夾的區別是建立一個包會自動產生一個__init__.py的檔案,該檔案可以寫內容也可以不寫內容。__init__.py的
模組名就死對應的包名,意思就死說當你直接調用這個包的時候實際上是調用包下面init裡的東西。
3、如何調用包內模組
1.如果調用模組和被調用模組在同一個包內,倆模組是屬於親兄弟關係那麼這倆模組可直接被調用。
2.如果調用模組和被調用模組在同一個包內,倆模組是屬於親叔侄關係,那麼需要以from 包名 import 模組名 來調用該模組
3.如果調用模組和被調用模組在同一個包內,倆模組是屬於表叔侄關係,那麼久需要調用os模組吧被調用包的路徑加到sys.path中去。
eg:import os,sys #調用模組
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#調用檔案路徑
print(BASE_DIR)
sys.path.insert(0,BASE_DIR)#添加到搜尋路徑
python基礎14 ---函數模組5(模組和包)