包
一、什么是包
包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来
二、注意点
1、导包就是调用_init_.py文件
2、凡是在导入时带点的,点的左边都必须是一个包,否则非法
3、 如果使用绝对导入,绝对导入的起始位置都是以包的顶级目录为起始点
4、 但是包内部模块的导入通常应该使用相对导入,用.代表当前所在的文件(而非执行文件),..代表上一级
三、示例
1 # 导包其实就是在导入包中的_init_.py文件 2 3 在p1包中 4 _init_.py文件 5 from p1.f1 import f 6 m1文件 7 def f(): 8 print('ffffffffffffffff') 9 10 在run.py执行文件 11 from p1.m1 import f 12 f()
四、相对导入与绝对导入
# 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入 # 优点: 执行文件与被导入的模块中都可以使用 # 缺点: 所有导入都是以sys.path为起始点,导入麻烦 # 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入 # 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹 # 优点: 导入更加简单 # 缺点: 只能在导入包中的模块时才能使用 #注意: 1. 相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内 2. attempted relative import beyond top-level package # 试图在顶级包之外使用相对导入是错误的,言外之意,必须在顶级包内使用相对导入,每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包