模塊和包
一個模塊就是一個包含python代碼的文件。一個文件就是一個模塊
為什么要使用模塊
1.現在程序開發文件比較大,都放在一個文件中維護不方便,拆分成多個文件方便維護與管理
2.模塊可以增加代碼的重用率
3.模塊可以當作命名空間
如何定義自己的模塊
模塊本身就是一個文件,所有py代碼都可以在文件中直接書寫。不過我們開發共用模塊時,最好在模塊中書寫以下內容。
變量 模塊中的屬性值
函數 單獨的功能
類 相似功能組合
模塊測試代碼 臨時使用,被導入時不會執行
測試代碼:
測試代碼經常在開發模塊時用于測試模塊的功能,但是測試代碼僅在開發和測試時使用,被當作模塊導入時不希望測試代碼運行。需要使用name特殊變量來操作。
if __name__ == '__main__':#測試代碼區域(僅在吧當前文件直接運行時才會執行測試代碼,當作模塊導入時則不會執行)
name 在直接運行當前文件時,結果為main
name 被當作模塊導入文件時,結果為 模塊名稱
模塊的導入方式
import 模塊名
作用:直接導入模塊
使用方法:模塊名.變量名模塊名.函數名模塊名.類名.方法名()模塊名.類名.屬性名
import 模塊 as 別名
作用:直接導入模塊,并且為模塊起一個別名
使用方法:別名.變量名別名.函數名別名.類名.方法名()別名.類名.屬性名
from 模塊 import 某個函數或者類
作用:直接導入模塊中的某個方法或者某個類或變量
使用方法:函數名()變量名類名.方法名()屬性名
from 模塊 import 函數,函數,類,類...
作用:直接導入模塊中的多個方法和多個類和變量
使用方法:函數名()變量名類名.方法名()屬性名
from 模塊 import *
作用:直接導入模塊中的所有方法和類和變量
使用方法:函數名()變量名類名.方法名()屬性名
注意事項:如果采用from 導入的方式要確保模塊中的函數變量等內容不能與系統的內置函數同名,否則會出現異常。
模塊的存放
如果不想自己新建自定義的模塊文件夾,可以將我們自定義的模塊存放到 python 目錄中的\Lib\site-packages中。
搜索路徑就是python在加載模塊時候的查找路徑
1.獲取當前模塊的搜索路徑
import sys
sys.path 獲取當前搜索路徑的列表
2.將自定義的路徑添加到列表中
sys.path.append(自定義路徑)
模塊的加載順序
導入模塊操作的步驟:
1.檢測內存中是否已經加載過當前模塊,如果加載過,直接使用加載的模塊
2.如果內存中沒有加載當前模塊,則搜索python的內置模塊
3.如果當前內置模塊中中沒有該模塊,根據搜索路徑查找并且加載模塊
包
包就是文件夾,他用于存放文件也就是模塊。包中也可以存放包
包的結構
包
|---- __init__.py 包的標志文件
|---- 模塊1
|---- 模塊2
|---- 子包(文件夾)
|-----|----__init__.py
|---- |----子模塊1
|---- |----子模塊2
包的導入和使用
import 包.模塊
使用方法:包.模塊.變量名包.模塊.函數名()包.模塊.類名.屬性名包.模塊.類名.方法名()
import 包.模塊 as 別名
使用方法:別名.變量名別名.函數名()別名.類名.屬性名別名.類名.方法名()
from 包.模塊 import 函數或者類或者屬性
使用方法:變量名函數名()類名.屬性名類名.方法名()
from 包.模塊 import *
使用方法:變量名函數名()類名.屬性名類名.方法名()
在__init__.py文件中添加內容(當模塊用)
在此情況下可以將包當作模塊直接導入使用
import 包
使用:包.變量名包.函數名()包.類名.屬性名包.類名.方法名()
import 包 as 別名
使用:別名.變量名別名.函數名()別名.類名.屬性名別名.類名.方法名()
from 包 import 函數,類,變量
使用:變量名函數名()類名.屬性名類名.方法名()
from 包 import *
使用:變量名函數名()類名.屬性名類名.方法名()
包和模塊的互相調用問題
如果在當前模塊中需要調用其他模塊或者包的內容時,可以直接使用import 導入對應的包和模塊,就可以加載進來使用,import 會搜索包和模塊對應的搜索路徑(sys.path)
import 模塊或者包
__all__特殊變量的用法
在__init__.py文件中,如果沒有__all__變量,那么使用from 包 import * 僅導入__init__.py中定義的方法和類及其他內容
在init.py文件中,如果定義all變量,那么使用from 包 import * 則會導入all指定的所有模塊,而忽略init.py文件中的信息
__all__ = ['模塊','模塊','子包'。。。] #必須是列表