首先须要将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次将注释打开进行测试,并查看结果,理解单入口模式的使用方法