• 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...

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

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

  • 相关阅读:
    JS之函数声明与表达式
    任重道远!
    Java_Notes01
    Android_Application Fundamentals
    Android_Activity
    Android
    Linux下的实模式和保护模式
    spring注解原理
    开启aix SFTP日志 是否和链接SFTP有关呢
    Apache版本兼容性问题
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/11365899.html
Copyright © 2020-2023  润新知