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

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

    与普通文件夹不同是就是其中包含一个__init__.py文件,叫初始化文件。这个文件作用是将该包下所有模块的与执行文件的导入关系写下来。从而使得import 包名,可以通过__init__.py文件import包下的所有模块名。

    包的作用

    包的作用就是从文件夹级别组织代码。目的是为了提高维护性。

    什么时候应该使用包

    之前我们将代码抽取成为函数(模块),即使做成py文件,一旦项目过大时候,就不能很好的管理模块,所以使用文件级别组织代码,这样减少结构上的混乱。

    包的使用

     import导入模块时发生了三件事情

    1.创建名称空间

    2.执行模块py文件,加在名称

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

    创建包

    创建一个包new->python package

    使用包

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

    import 包名

    在导入包的时候,由于包是一个文件夹,是不能被执行的,所以执行的其实包内__init__.py的文件,这个文件就表示这个包

    __init__.py文件的作用就是导入该包下的所有模块,这样一来使用包的人,就会很简单,无需关注包内的文件结构,直接导入包就可以了,就能使用所有包中的功能。

    __init__.py文件应该包含什么内容?

      不应该包含任何业务逻辑,仅仅只用于导入包中的模块。

    __init__文件的作用

    我们说包也是一个文件所以内部原理同模块相同。但是包它是一个文件夹而不是一个py文件,导入包名实际上执行的_init__文件。

    __init__的作用是初始包,初始化其实就是将包中需要提供给外界的模块同一导入打包在一起

    用户导入了包,就能使用所有的功能

    注意

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

    包的嵌套

    定义是包中有包

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

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

    导入包时的注意事项

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

    import pack.subpack.module1

    注意点的左边必须是包名

    我们也可以使用from   import 来导入

    from pack.subpack import module1

    注意  from import后面的内容不能加点,必须是一个明确的名字

    相对导入与绝对导入

    很多时候一个包内的模块需要相互调用对方的功能来完成操作。按照之前从执行文件的目录下一层一层导入模块是可以的。但是包名改变是,就需要将相关的模块的导入信息全部修改。

    绝对导入就是以执行文件为关键,一层一层写导入关系,

    而相对导入就是以导入文件根据,根据其上下级的关系来写入关系。这样可以使得导入方式的书写较为简单并提高了代码的扩展性。

    注意点:相对导入只适用包这一级别,不可以达到执行文件级别,所以不能用于执行文件中

    常见错误:

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

    2、在执行文件中使用相对导入

    3.包中的相对导入跳出了顶层包(即到了没有__init__.py的文件夹下)

  • 相关阅读:
    UIWebView显示乱码问题
    Masonry控制台打印约束冲突问题解决
    iOS正则表达式之验证问题总结
    Cannot assign to 'self' outside of a method in the init family
    iOS模拟器设置输入中文
    python递归中的return"陷阱"
    自己动手写一个U盘拷贝小工具
    selenium对富文本框的处理
    selenium webdriver如何添加cookie
    利用ChromeOptions()加载用户配置
  • 原文地址:https://www.cnblogs.com/msj513/p/9780626.html
Copyright © 2011-2022 走看看