第十八天 包

内置函数

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

与普通文件夹的区别是其中包含一个int文件

包的作用

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

目的是为了提高维护性

什么时候应该使用包

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

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

包的使用

创建一个包

右键 new ->python package

使用包

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

import包含

init文件的作用

思考在淡入包时发生了什么?

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

1.创造名称空间

2.执行模块中的代码

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

但是现在包他是一个文件夹不是一个py文件那么第二部怎么执行呢?

这时候init.py就派上用场了

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

好处

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

通常情况下一个包含有多个 模块并且这些模块经常会同时被导入使用

这时候你可以在init中将需要的模块一次性导入 当外界在使用这个包的时候 就无需再挨个导入了

总结

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

要指定包名

  pack 包下的init

  from pack import module

  import pack.module

另外

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

包的嵌套

定义:包中有包如下

要使用子包中的内容 方法一直 在子包中的init中导入需要的内容 但是注意 不管是不是子包都要作为模块导入

所以sys.path中肯定不包含子包路径 导入时需要从执行文件目录下找

  subpack包下的 init文件

  import pack.subpack.module4

导入包时的注意事项

使用import导入模块时 可以加点来访问下一层

import pack.subpack.module4

==注意 点的坐标必须是包名==

我们也可以使用from来导入

  from pack.subpack impor module4

 

相对导入与绝对导入

利用上面的例子 我们技术来思考

很多时候一个包内的模块需要相互调用对方的功能来完成操作

按照我们之前的导入方式 从执行文件开始一层一层往下找是可以的

但是一个问题是如果报的层级较多 你的导入语句会很长 

另一个问题 如果我们后期需要修改的名称 那你需要将每一个导入语句都进行修改

来看一下例子:

我们可以使用相对导入的方式来简化书写兵提高我们的代码拓展性

注意

==相对导入仅能用于模块之间相互导入 不能用于执行文件中==

常见错误演示

1.绝对导入时没有从执行文件目录开始

2.执行文件中使用相对路径

3 跳出顶层包

ᕞԟ   ࣘཛྷӻӞ׀൉ ᘏݎ୏ጱࣘཛྷӻӞԅ֢ ᕳय़ਹֵአ ᵙࢯ஑ݒቘᓕ ग़᩼๶᩼ᚆۑጱӾࣘཛྷጱ֦ᑏവጱᳵ෸፳ᵋୗොጱࣘཛྷړݐ᯻ฎԭ ݒදኞݎୗොአ᧣ጱಁአᛘ੕ਖ਼ կ෈ړ෮Ӟฎ֕ አಁᵱᥝ՗ෛ਍ԟෛጱֵአොୗ ሿࣁ֦ጱᶎԁጱᳯ᷌ฎ ୗොአ᧣ጱಁአๅݒӧӬଚ ׎ො஑ݒᎱդቘᓕ૩ᛔֵड़ᚆ֜ইᥴ٬ጱොໜ੪ฎ ֵአ۱ ଚࣁinit෈կӾ ᚆۑํಅف੕ ቘᓕᘏݎ୏׎ො Ӿկ෈ӻӞکӾᵞᚆۑጱӾࣘཛྷञӞਖ਼ฎ੪Ԏॿຄᕣጱ۱զಅ== դᎱ =

猜你喜欢

转载自www.cnblogs.com/gongcheng-/p/9780800.html