首先須要將import內容創建一個大概以下層級的包:python
以黑色框爲第一級,藍色框爲第二級,棕色框爲第三級,紅色框爲第四級app
首先在module.py寫入代碼以下:函數
xboy = "hsz" xgirl = "zero" def dog(): print("小狗喜歡啃骨頭") def cat(): print("這個小貓的名字叫作小花") class MyStu(): name = "Python" print("hello python") print(__name__) if __name__ == "__main__": #若是是間接的被導入,下面的代碼不執行 print("test")
而後在main.py寫入代碼並逐個運行:學習
import module #請記住:當導入模塊的時候,只須要一次便可,終身受益.不會出現重複導入的狀況 #模塊.屬性(變量) res = module.xboy print(res) #模塊.函數(方法) module.dog() #模塊.類 print(module.MyStu().name) #使用別名調用模塊當中的成員 import module as m print(m.xboy) m.cat() import sys print(sys.path) """ #自定義模塊,進行導包 ''' 在導包的時候,系統默認先從sys.path 這個路徑開始尋找,若是找不到,直接報錯, 若是想要找到,把相應的路徑插入到sys.path這個列表,系統自動尋找對應模塊. ''' import sys """ sys.path.append(r"F:/hsz/zero/ceshi_module/") # import abcd print(abcd.ceshi001)
而後對上面的mian.py裏的內容進行註釋,日後添加以下代碼進行一步步運行:測試
#引入一個 from module import dog dog() #引入多個 from module import cat,xgirl cat() print(xgirl) #引入全部 * 表明全部 from module import * print(xboy) #能夠在引入的同事,起一個別名 from module import cat as c,xboy as ww print(ww) c() print(__name__,type(__name__)) #__main__ """ #返回模塊名字的魔術屬性 __name__ 若是當前文件是直接執行的,就是主文件(主進程),返回__main__ 若是當前文件是間接執行的,就是子文件(子進程),返回當前文件名(模塊名) """ if __name__ == "__main__" : #if "main" == "__main__" 條件不成立 , 下面的代碼不執行,不導入 # __name__ == __main__ 用來作測試用的, 在被間接導入的時候,下面的代碼不須要導入 print("test code")
先對a.py 寫入代碼:spa
ceshia = 10011 ceshia2 =10012 ceshia3 = 10013
對mypath.py寫入代碼:code
def join(): print("自定義join") ceshimypath = "mypath2345678"
還有package1下的__init__.pyblog
ceshi101 = 10111111 # __init__ 不是用來直接運行的,而是伴隨包的初始化的. # 方法三調用時,打開進行測試. # from package1 import a # from package1 import mypath
而後對main2.py寫入代碼,一個方法一個方法進行運行進程
#文件就是一個模塊,文件就是一個包 #文件夾裏面能夠有不少文件,就至關於包中有不少的模塊 #若是想把包當成模塊用,在建立一個__init__.py中進行定義 #當引入一個包的時候,當前包下的__init__文件自動執行 import package1 print(package1.ceshi101) #方法一 import package1.a print(package1.a.ceshia) #方法二 (起別名) import package1.a as pa print(pa.ceshia2) #方法三 # print("======方法三=========") # print(package1.a.ceshia) # package1.mypath.join() # 類比os.path.join的用法
注意:方法三隻有在用的時候纔將註釋去掉運行測試,爲了避免影響接下來的運行,運行完方法3後對其進行註釋ip
而後對main2.py接下來的運行作好準備,須要在個個包下的文件添加內容如:
/package2/pkgone/pkgone2.py 內容爲:
ceshippone2 = "ceshione2" ceshippone22 = "ceshione22"
/package2/pkg_module1.py內容爲:
ceshim1 = "m1"
/package2/pkgtwo/pkgtwo1.py內容爲:
ceshi222 =222
ceshi2222 = 222222
接下來是main2.py添加以下代碼:
#引入package1包下 a模塊中的ceshia2 屬性 from package1.a import ceshia2 print(ceshia2) #引入的同事,起別名 from package1.mypath import ceshimypath as cm,join as j print(cm) j()
## 引入 package2 包下的 pkgone 包下的 pkgone1 模塊 ,順便起別名ppp1 import package2.pkgone.pkgone1 as ppp1 print(ppp1.ceshippp)
對此代碼塊進行一 一測試
分模塊不能單獨進行調用,統一由主文件main進行調用 模塊之間的互相嵌套導入使用相對路徑實現 單入口文件必須和包在同一層級,包裏面能夠含有各類包和模塊
#單入口模式主要是對子文件的內容進行測試,在/package2/pkgone/pkgone1.py文件下添加以下代碼:
ceshippp = "測試pppone" ceshippp1 = "測試pppone1" #子文件,若是是單入口模塊,不能直接執行,由於在這裏都用的的相對路徑 #1.
from . import pkgone2 print(pkgone2.ceshippone22) #2. from.pkgone2 import ceshippone2 print(ceshippone2) #3. from .. import pkg_module1 print(pkg_module1.ceshim1) #4. from .. pkgtwo import pkgtwo1 print(pkgtwo1.ceshi222) #5. from ..pkgtwo.pkgtwo1 import ceshi2222 print(ceshi2222) """ . 當前路徑 .. 上一級路徑 ... 上一級的上一級 .... 上一級的上一級的上一級 ..... (這裏的點是無限的) from .......................................... import 模塊 """
最後是在main2.py進行測試,將pkgone1.py文件一行行註釋後,而後分5次將註釋打開進行測試,並查看結果,理解單入口模式的使用方法