068 包

一、什么是包?

包是模块的一种形式,包的本质就是一个含有.py的文件的文件夹。

在后面的介绍中,

二、为什么要有包?

模块的第一个版本只有10个功能,但是未来在扩展版本的时候,模块名和用法应该最好不要去修改,但是这只是对使用者友好,而由于版本扩展,文件越来越大,模块设计者对模块的管理、维护会越来越复杂,因此我们可以使用包来扩展模块的功能。

三、模块和包

模块就是一个.py文件

就是一个文件夹,其中含有__init__.py的文件

导入模块发生的三件事:

  1. 创建一个包的名称空间
  2. 执行py文件,将执行过程中产生的名字存放于名称空间中。
  3. 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的

导入包发生的三件事:

  1. 创建一个包的名称空间
  2. 由于包是一个文件夹,无法执行包,因此执行包下的.py文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于.py)
  3. 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的

四、如何用包

记住,一个包就代表包含了更多的模块更多的函数更多的功能。

包中的__init__.py文件,就相当于在管理包中的各个模块,各个功能。告诉用户如何使用包。如何导入,包中有哪些方法可以使用。就好像C中的Makefile脚本文件类似。

创建包

画重点:这里主要介绍的是自定制的包,因为第三方的包都在环境变量下,直接可以通过包名进行import导入。而自定制的包,实际上就是自己写的包。

流程:

  1. 首先,在要从创建的目录下创建 package Test文件夹,文件夹中包括__init__.py文件

  2. 然后再文件夹下去创建m1.pym2.py

  3. # m1.py
    
    def func1():
        pass
    
    def func2():
        pass
    
    def func3():
        pass
    
  4. # m2.py
    
    def func4():
        pass
    
    def func5():
        pass
    
    def func6():
        pass
    

修改_init_.py文件

首先要说一下 相对导入绝对导入 的问题。

之前说了__init__.py文件就好像包中的一个管理工具,它告诉别人包中的哪些模块功能可以被直接调用。因此,就需要通过导入的方式,把模块中的功能先导入到__init__.py文件中,别人在导入该包,使用包中功能时就可以直接使用。因为,实际上在使用包进行导入时就是在导入__init__.py文件。导包就是导入__init__.py文件

绝对导入

from 文件目录名/模块名 import 函数名 导入指定目录下模块中的某个功能函数

from 文件目录名/模块名 import * 导入指定目录下模块中的全部功能函数

相对导入

  • .代表当前被导入文件所在的文件夹
  • ..代表当前被导入文件所在的文件夹的上一级
  • ...代表当前被导入文件所在的文件夹的上一级的上一级

from ./模块名 import 函数名 导入当前目录下模块中的某个功能函数

from 文件目录名/模块名 import * 导入模块中的全部功能函数

导入包

在导包之前,首先要查看环境变量。要导入的自定制的包是否在环境变量下

导包就是导入__init__.py文件,并且可以使用以下两种方式导入:

  1. import ...
  2. from ... import...

包, 就是把一个模块分成多个文件存储,但还是和模块同样的导入方式进行导入即可。

需要导入什么功能,就去导入什么功能。使用者感觉不到变化

posted @ 2019-08-16 19:18  正在学习的Barry  阅读(166)  评论(0编辑  收藏  举报
-->