包的介绍

一、什么是包

  包就是一个包含有__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 # 试图在顶级包之外使用相对导入是错误的,言外之意,必须在顶级包内使用相对导入,每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包
 

猜你喜欢

转载自www.cnblogs.com/linagcheng/p/9454547.html