包是什么:

包是一种模块 但本质上就是一个文件夹

与普通文件夹的区别就是其中包含一个__init__.py文件

 

包的作用

包的作用就是从文件夹级别组织代码

目的是为了提高维护性

 

什么时候应该使用包

之前我们将代码抽取到模块中 从文件级别组织代码 但是如果模块比较多的情况下 结构依然混乱

此时我们就需要使用包来组织代码

 

包的使用:

创建一个包

右键 new->python package

使用包

既然包也是模块 那么使用方式就是一样的 使用import 来导入包

import 包名

 

init文件的作用:

在导入包时发生了什么?

包也是一种模块 所以内部原理是一样的

1.创建名称空间

2.执行模块中的代码

3.在执行文件中产生名称指向模块名称空间

但是现在包是一个文件夹而不是一个py文件

所以在导入包时 实际上执行的就是这init文件

好处:

如此一来我们可以使用init来把一个文件夹变成一个模块 这个模块的种类是包

总结:

init的作用是初始化包 初始化其实就是将包中需要提供给外界的模块统一导入 打包在一起 用户导入了包 就能使用所有的功能

注意点:

init 导入模块文件时 由于是作为模块导入 所以sys.path中并不包含 模块所在目录 所以应该导入时要指定包名

pack包下的init
from pack import module
import pack.module
View Code

 

另外

init文件在python2中是必须的 python3中可选的 但是建议都要有

 

包的嵌套:

subpack包下的 init文件
import pack.subpack.module4

使用import导入模块时 可以加点来访问下一层
import pack.subpack.module4
==点的左边必须是包名==

用from导入
from pack.subpack import module4
==import后面必须是一个明确的名字 不能加点
View Code

 

相对导入与绝对导入

 

相对导入:

相对于被导入模块的路径

相对导入只能用于包的内部模块之间互相导入

注意 建议不要超过三层

 

绝对导入:

从sys.path开始的完整路径称之为绝对导入

我们会发现

1 如果你的包的层级比较复杂 写起来很长

2 假如有一天 你需要修改包名 你需要将所有导入语句全改一遍

为了解决这两个文件 我们最好使用相对导入

 

posted @ 2018-10-12 21:01  Summerdreamcold  阅读(210)  评论(0编辑  收藏  举报