文件夹module_test:1.main.py 主程序
2.module01.py 模块一
包package01: 2.p_test01.py 模块
3.p_test02.py 模块
4.p_test03.py 模块
1.定义:
模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)
包:本质就是一个目录(必须带有一个叫__init__.py文件)
从逻辑上组织模块
2.导入方法
import module01 #导入模块
import module01,module02 #有多个模块用逗号隔开
from module01 import * #导入module_01的所有 相当于把module_01下的所有东西在这里展示出来 不建议使用
from module01 import m1,m2,m3 #导入module01模块里的多个函数
form module01 import logger as logger_def #当主程序和模块都里有个logger函数时, 给模块的函数重新定义一个名,在主程序直接运行别名函数
form module01 import name #(name是模块的变量)相当与name='jeck' 执行了一边 在主程序里使用是直接使用,不用加模块名
导入包:
import package01 #导入包
导入上级目录的模块:
import module_test
3.import的本质
相当与把module01模块解释了一边或称运行了一边,把module01里的所有代码函数等封装赋值给module01
(import先在本目录下寻找module01模块)
导入包的本质就是解释、执行包下面的__init__.py文件 在主程序运行时会直接执行__init__.py文件
例如:包package下有test1模块,模块里有个test函数,同级包的一个目录下有main.py要调用test1模块,package下的__init__文件里就要导入 form.import test1(“.”从当前目录下导入)
相当于把test1模块里的代码在__init__里面执行了一遍,main里面先导入路径sys.path.append('../')再导入包import package 执行package.test1.test()即可执行
如dir1和dir2同级,dir1下有个包package,包里有test1模块,模块里有个test函数,dir2里有个main.py想调用test函数main里应该
1 import sys,os
2
3 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
4
5 from dir1 import package
6
7 package.test1.test()
小技巧:
module.py和main.py 同级,module有个test函数,main里很多函数要调用test,如果main里这样import module定义, 就每个函数都要去寻找module再找到test,module.test()执行,
这样就降低效率。如果是form module import test定义 就相当于test函数在main里面解释执行了一遍,就直接test()使用,有重名就as定义个别名