zoukankan      html  css  js  c++  java
  • 包是什么:

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

    与普通文件夹的区别就是其中包含一个__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 假如有一天 你需要修改包名 你需要将所有导入语句全改一遍

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

  • 相关阅读:
    npm 安装Vue环境时报错
    WinSCP与SecureCRT
    LeetCode100---Same Tree
    LeetCode404---Sum of Left Leaves
    LeetCode283---Move Zeroes
    LeetCode344---Reverse String
    Java多线程一
    Java知识点总结
    Java泛型
    深入浅出设计模式学习笔记四:单例模式
  • 原文地址:https://www.cnblogs.com/xiamenghan/p/9780707.html
Copyright © 2011-2022 走看看