首先需要将import内容建立一个大概如下层级的包:
以黑色框为第一级,蓝色框为第二级,棕色框为第三级,红色框为第四级
一.import 引入初识
首先在module.py写入代码如下:
xboy = "hsz"xgirl= "zero"
defdog():print("小狗喜欢啃骨头")defcat():print("这个小猫的名字叫做小花")classMyStu():
name= "Python"
print("hello python")print(__name__)if __name__ == "__main__":#如果是间接的被导入,下面的代码不执行
print("test")
然后在main.py写入代码并逐个运行:
1.import 引入
importmodule#请记住:当导入模块的时候,只需要一次即可,终身受益.不会出现重复导入的情况#模块.属性(变量)
res =module.xboyprint(res)#模块.函数(方法)
module.dog()#模块.类
print(module.MyStu().name)#使用别名调用模块当中的成员
importmodule as mprint(m.xboy)
m.cat()importsysprint(sys.path)"""#自定义模块,进行导包
'''
在导包的时候,系统默认先从sys.path 这个路径开始寻找,如果找不到,直接报错,
如果想要找到,把相应的路径插入到sys.path这个列表,系统自动寻找对应模块.
'''
import sys"""sys.path.append(r"F:/hsz/zero/ceshi_module/") #importabcdprint(abcd.ceshi001)
然后对上面的mian.py里的内容进行注释,往后添加如下代码进行一步步运行:
2.from...import 从哪里..引入...方法
#引入一个
from module importdog
dog()#引入多个
from module importcat,xgirl
cat()print(xgirl)#引入所有 * 代表所有
from module import *
print(xboy)#可以在引入的同事,起一个别名
from module importcat as c,xboy as wwprint(ww)
c()print(__name__,type(__name__)) #__main__
"""#返回模块名字的魔术属性 __name__
如果当前文件是直接执行的,就是主文件(主进程),返回__main__
如果当前文件是间接执行的,就是子文件(子进程),返回当前文件名(模块名)"""
if __name__ == "__main__" : #if "main" == "__main__" 条件不成立 , 下面的代码不执行,不导入
#__name__ == __main__ 用来做测试用的, 在被间接导入的时候,下面的代码不需要导入
print("test code")
3.学习导入包
先对a.py 写入代码:
ceshia = 10011ceshia2=10012ceshia3= 10013
对mypath.py写入代码:
defjoin():print("自定义join")
ceshimypath= "mypath2345678"
还有package1下的__init__.py
ceshi101 = 10111111
#__init__ 不是用来直接运行的,而是伴随包的初始化的.
#方法三调用时,打开进行测试.#from package1 import a#from package1 import mypath
然后对main2.py写入代码,一个方法一个方法进行运行
#文件就是一个模块,文件就是一个包#文件夹里面可以有很多文件,就相当于包中有很多的模块#如果想把包当成模块用,在创建一个__init__.py中进行定义#当引入一个包的时候,当前包下的__init__文件自动执行
importpackage1print(package1.ceshi101)#方法一
importpackage1.aprint(package1.a.ceshia)#方法二 (起别名)
importpackage1.a as paprint(pa.ceshia2)#方法三#print("======方法三=========")#print(package1.a.ceshia)#package1.mypath.join() # 类比os.path.join的用法
注意:方法三只有在用的时候才将注释去掉运行测试,为了不影响接下来的运行,运行完方法3后对其进行注释
4.from ..import语法
然后对main2.py接下来的运行做好准备,需要在个个包下的文件添加内容如:
/package2/pkgone/pkgone2.py 内容为:
ceshippone2 = "ceshione2"ceshippone22= "ceshione22"
/package2/pkg_module1.py内容为:
ceshim1 = "m1"
/package2/pkgtwo/pkgtwo1.py内容为:
ceshi222 =222ceshi2222= 222222
接下来是main2.py添加如下代码:
#引入package1包下 a模块中的ceshia2 属性
from package1.a importceshia2print(ceshia2)#引入的同事,起别名
from package1.mypath importceshimypath as cm,join as jprint(cm)
j()
## 引入 package2 包下的 pkgone 包下的 pkgone1 模块 ,顺便起别名ppp1
import package2.pkgone.pkgone1 as ppp1
print(ppp1.ceshippp)
对此代码块进行一 一测试
5.单入口模块(重要)
分模块不能单独进行调用,统一由主文件main进行调用
模块之间的互相嵌套导入使用相对路径实现
单入口文件必须和包在同一层级,包里面可以含有各种包和模块
#单入口模式主要是对子文件的内容进行测试,在/package2/pkgone/pkgone1.py文件下添加如下代码:
ceshippp = "测试pppone"ceshippp1= "测试pppone1"
#子文件,如果是单入口模块,不能直接执行,因为在这里都用的的相对路径
#1.
from . importpkgone2print(pkgone2.ceshippone22)
#2.from.pkgone2 importceshippone2print(ceshippone2)
#3.from .. importpkg_module1print(pkg_module1.ceshim1)
#4.from .. pkgtwo importpkgtwo1print(pkgtwo1.ceshi222)
#5.from ..pkgtwo.pkgtwo1 importceshi2222print(ceshi2222)""". 当前路径
.. 上一级路径
... 上一级的上一级
.... 上一级的上一级的上一级
..... (这里的点是无限的)
from .......................................... import 模块"""
最后是在main2.py进行测试,将pkgone1.py文件一行行注释后,然后分5次将注释打开进行测试,并查看结果,理解单入口模式的使用方法