一. 包
1. 什么是包?
集合了一组py文件,提供了一组复杂功能的
2. 为什么要有包?
当提供的功能比较复杂,一个py文件写不下的时候
3. 包中都有什么?
至少拥有一个__init__.py
4. 直接导入模块
1. import 包.包.模块
包.包.模块.变量
2. from 包.包 import 模块
模块.变量
from 包.包 import 模块
模块.变量
5. 导入包,读框架源码的时候
如果希望导入包之后,模块能够正常的使用,那么需要自己去完成init文件的开发
包中模块的,绝对导入
包中模块的,相对导入
使用了相对导入的模块只能被当作模块执行
不能被当做脚本执行
6. 直接导入包
相当于执行了__init__.py
并不会帮你把这个包下面的其他包以及py文件自动的导入到内存
在__init__.py文件中做一些导入设置, 才能保证导入包的时候能够使用这个包中的模
文件夹的流程图:
demo1文件夹里面的 __init__.py文件里的内容;
# 绝对路径可以有两种: from demo1.glance import api # 绝对路径(1) 绝对导入 import demo1.glance # 绝对路径(2) # 用的from . import (变量)..方法: # 相对导入 from . import glance print('执行demo1')
glance文件夹里面的 __init__.py文件里的内容;
# 绝对路径可以有两种: from demo1.glance.api import policy # 绝对路径(1) # 绝对导入 import demo1.glance.api # 绝对路径(2) # 用的from . import (变量)..方法: # 相对导入 from . import api print('执行glance')
api文件夹里面的 __init__.py文件里的内容;
import demo1.glance.api.policy # 绝对路径(2) # 绝对导入 # 用的from . import (变量)..方法: # 相对导入 from . import policy print('执行api')
api文件夹里面的policy.py文件里的内容;
def func(): print('执行policy和func')
1. 使用包的用法:
# 首先导入包,相当于执行了这个包下面的__init__.py import demo1.glance.api.policy as policy # import 包包.. as (模块)变量 policy.func() # 模块名(变量)调用里面的变量 from demo1.glance.api import policy # from 包包... import 模块名(变量) policy.func() from demo1.glance.api.policy import func # from 包包... import 模块名(变量) func() import demo1.glance.api.policy # import 包包...(直接锁定) demo1.glance.api.policy.func() # 还执行了__init__里面的文件
2. 使用包的用绝对路径和相对路径的两种方法:
# 方法一 import demo1 # 绝对路径 # from 包... import 变量 # 通过在init文件里来完成一些模块的导入实现变量的调用,要用到上面的方法的调用 demo1.glance.api.policy.func() # 通过包里面的__init__文件里导入模块来实现的变量的调用 # 方法二 # 用这个方法: from . import 变量 # 相对路径 from demo1 import glance glance.api.policy.func() # from .(这个点表示当前文件) import ..(这里是执行下一个包或变量) # 可以用绝对路径的模块,也可用这个方法 from . import 变量(包) .......