模組:一系列功能的集合體
定義模組:建立乙個py檔案就是乙個模組,該py檔名就是模組名。
使用模組:在要使用模組的檔案中,通過import模組名來匯入模組。
import moudle
#1.編譯執行模組對應的py檔案,形成對應的pyc檔案
#2.產生該模組自己的全域性命名空間
#3.在使用該模組的全域性命名空間中產生乙個名字(匯入的模組名)
注:1.每乙個檔案都會產生自己的全域性命名空間
2.多次匯入,只會編譯執行模組一次,將其載入到記憶體,之後直接在記憶體中讀取名字直接引用
優點:1.從檔案級別組織**,是共同性的功能能統一管理。
2.可以使用系統或第三方模組,來提高開發效率
# 起別名
通過as關鍵字可以給模組起別名:模組名一旦起別名,原模組名就不能使用了。
1.可以簡化模組名
2.可以統一功能
1.
import nnnnnn2 as my_n2
print(my_n2.num)
2.cmd = input('資料庫選擇1:mysql | 2:oracle ')
if cmd == '1':
import mysql as db
else:
import oracle as db
db.excuse()
from匯入
from模組名 import 名字1,名字2,。。,名字n
指名道姓匯入模板中所有想匯入的名字。
from 模組名 import *
匯入的是模組中__all__這個列表
1.系統預設該列表不會收錄_開頭的名字。
2.可以自定義__all__列表來規定外界通過*可以匯入的名字
不建議直接匯入*,因為可讀性差,且極容易出現變數重名
from 模組名 import * # 模組中有名字a
a = 20 # 可以使用模組中的a
結論: 模組中的 a 就被覆蓋了,且**上還不能直接看出
起別名from 模組名 import 名字1 as 別名1,..............,名字n as 別名n
自執行與模組的區別
__name__:
1.在py檔案作為模組被使用時,__name__為模組名
2.在py檔案自執行時,__name__為字串 '__main__'
print('共有邏輯')
if __name__ =='__main__':
# 所有自執行的邏輯
print('m6: 我是自執行的')
a = 10 # 產生的是全域性的名字
else:
# 所有模組的邏輯
print('m6: 我被匯入執行')
print(a) # 會報錯:走else就不可能走if,所以a壓根沒產生
總結:
模組的概念:一系列功能的集合體
為什麼要使用模組:使用模組後的優點:1.從檔案角度考慮** 2.拿來主義,提高開發效率
py中實現模組的方式:4種,重點:py檔案
定義模組:新建乙個py檔案:檔名就是模組名,盡量採用全英文,也可使用數字加下劃線的方式
使用模組:可以不用起別名,但一旦起別名,原名就不能在使用
----import 模組名 as 別名
----from 模組名 import 名字 as 別名
自執行檔案與模組區分:__name__
包通過資料夾來管理一系列功能相近的模組
包:一系列模組的集合體
重點:包中一定有乙個專門用來管理包中所有模組的檔案
包名:存放一系列模組的資料夾名字
包名存放的是管理模組的那個檔案的位址,指向其全域性命名空間。
模組的載入順序:
記憶體 => 內建 => sys.path (一系列自定義模組)
import sys
sys.path # 環境變數:存放檔案路徑的列表
重點:預設列表第乙個元素就是當前被執行檔案所在的目錄
可以自定義往sys.path新增路徑
sys.path.insert(0, r'想匯入的模組的絕對路徑') # 新增到指定指定索引,索引決定自定義模組的查詢順序。
# 模組匯入的執行流程
匯入模組的指令:
——相對於函式名()呼叫函式體,函式呼叫會進入函式體,從上至下逐句解釋執行函式體**
——匯入模組,會進入模組檔案,從上至下逐句解釋執行模組檔案**
——如果在模組中又會遇到匯入其他模組,會接著進入匯入的模組,從上至下逐句解釋執行檔案**,以此類推。
迴圈匯入
模組之間出現環狀匯入,如:m1.py 中匯入了m2, m2.中又匯入了m1
迴圈匯入的問題:
——匯入模組是要使用模組中的變數
——正常邏輯都是在檔案最上方先完成對模組的匯入,再在下方定義自身模組變數,以及使用匯入的模組中的變數
——由於匯入模組的特殊機制,第一次匯入模組會編譯執行匯入的模組,也就是會進入模組逐句執行模組內容,再次匯入只是使用記憶體中的名字
——就會出現下面情況,m2在使用m1中的變數x,但變數x卻並未產生,這就出現了迴圈匯入問題
解決迴圈匯入的問題:延後匯入
1.將迴圈匯入對應包要使用的變數提前定義,再匯入響應的包
2.將導包的路徑放到函式體中,保證存放導包邏輯的函式呼叫在要使用的變數定義之後。
重點:問題:from導包極容易出現迴圈匯入問題
解決:建議from匯入方式改用import匯入方式
包的匯入:
import本質:通過查詢環境變數(sys.path)中的絕對路徑來完成匯入
導包:1.保證包所在資料夾在環境變數中
2.匯入的資料夾名就是包名
導包完成的三項:
1.編譯執行包中的__init__.py檔案,會在包中__pycache__建立對應的pyc檔案
2.產生__init__.py檔案的全域性命名空間,用來存放__init__出現的名字
3.產生包名指向__init__.py檔案的全域性命名空間 | 指定變數名指向包中指定名字
總結:包名為資料夾名,命名空間是__init__.py產生的
## 使用包中模組中的名字:採用import匯入
注意點:
1.在包__init__.py中不建議使用import匯入
2.在包__init__.py中不建議使用as起別名
總結:不建議__init__.py中採用import管理名字 ==> 空著不寫
在使用檔案中:
直接在要使用的檔案中用import一層層找你要的名字
import 包名.檔名 as 別名
# 起完別名,原名不可以再使用
原名:包名.檔名 => 包名.檔名.變數名
別名:別名 => 別名.變數名
1.__init__.py檔案中產生的普通名字可以直接使用
2.管理的模組**現的名字,要通過包名.模組名 間接使用
包的巢狀
重點:導包.語法,在所有點左側都必須是包
import 父包.子包
import 父包.子包.模組
導包的兩種方式
絕對匯入:通過sys.path方式來實現
將對應的資料夾新增至sys.path中,就可以直接匯入對應資料夾下的模組
相對匯入:通過包內.語法來實現
# 相對匯入是存在於包內的語法
# .代表當前資料夾
# ..代表上一級資料夾
# 存在.語法的檔案,不能作為執行檔案
python模組與包
路徑修改 命令列怎麼檢視路徑,修改路徑 列印當前搜尋路徑 import sys sys.path sys.path import os os.getcwd os.chdir c www 模組實現構建模組的初衷就是將一些同類的東西進行打包,以免汙染全域性空間,在python的模組裡,對需要隱藏的屬性和...
python 模組與包
模組與包 1.什麼是模組 在 python 中,乙個.py檔案就稱之為乙個模組 module 模組的優點 大大提高了 的可維護性 編寫 不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用 2.匯入模組的幾種方式 4.模組的分類 1 內建模組 os,sys,dnspython,socket,tim...
python包與模組
python模組 py檔案就是模組 1.在同乙個工作目錄 呼叫其他模組裡面的方法一 import module 呼叫 module.function 注意 此時import module時,在執行當前 時,會先執行被import的module裡的 import module as m1 別名,類似w...