• 内置函数

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

    与普通文件夹的区别是其中包含一个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 跳出顶层包

  • 相关阅读:
    [最短路径SPFA] POJ 1847 Tram
    [强连通分量] POJ 1236 Network of Schools
    [强连通分量] POJ 2762 Going from u to v or from v to u?
    [强连通分量] POJ 2186 Popular Cows
    [宽度优先搜索] HDU 1372 Knight Moves
    php错误级别和异常处理
    php配置优化
    魔术方法和魔术常量
    事务
    mysql备份和还原
  • 原文地址:https://www.cnblogs.com/gongcheng-/p/9780800.html
Copyright © 2020-2023  润新知