#返回顶部按钮 #生成一个目录导航

1.内容大纲

  1. 模块的定义与分类
  2. import
  3. from ... import ...
  4. from ... import *
  5. py文件的两个功能
  6. 模块的搜索路径

2.具体内容

  1. 模块的定义与分类

    1. 什么是模块

      • 一个模块就是一个py文件,这个模块存储很多相似的功能
    2. 模块的分类

      • 内置模块,标准库,python解释器自带的,time,os,sys等等200多种
      • 第三方库(模块)通过pip install 安装,6000多种
      • 自定义模块,自己写的模块
    3. 模块的运行方式(py文件)

      • 脚本方式:直接用解释器执行
      • 模块方式:被其他的模块倒入,为导入他的模块提供资源
    4. __name__属性的使用

      • 在脚本方式运行时,__name__是固定的字符串:__main__
      • 在以模块导入时,__name__就是本模块的名字
      • 在自定义模块中对__name__进行判断,决定是否执行可执行语句,开发阶段就执行,使用阶段就不执行
      if __name__ == '__main__':
        (要执行的函数)
      
  2. import

    1. 当引用模块的时候,实际上将该模块执行了一遍,加载到内存(只有在第一次引用的时侯,才将此模块加载到内存)

    2. 第一次导入模块发生的三件事

      • 将导入的模块(如:tb)加载到内存
      • 在内存中创建以tb命名的名称空间
      • 通过(tb.)的方式引用此模块的名字(变量,函数名,类名)
    3. 被导入模块有独立的名称空间

      • (坑)通过tb.的方式引用此模块的名字,一定是从此模块中寻找的
    4. 为模块起别名

      import contextlib as cb
      
    5. 导入多个模块

      import time,os,sys #不推荐
      import time
      import os
      import sys 
      
  3. from ... import ...

    from tb import name
    #相当于从tb模块的全局空间中将name,变量与值的对应关系复制到了当前执行文#件的全局名称空间中
    
    1. 优点:使用方便
    2. 缺点:容易产生覆盖效果
    3. 导入多个名字(同import)
    4. 起别名(同import)
  4. from ... import * (控制成员被导入)

    1. from tb import *

      • 将tb模块的所有名字复制过来
      • 容易覆盖
    2. __all__配合使用

      • __all__是一个列表,用于表示本模块可以被外届使用的成员,元素是成员名放入字符串
      • __all__只对from xxx import * 这种导入生效
      __all__ = ['name', 'read1', 'read2']#被引用模块开头
      
      
  5. import xxx 与from xxx import *的区别

    1. import在使用其中成员时,必须使用模块名作为前缀;不容易产生冲突

    2. from... 在使用其中成员时,不用使用模块名作为前缀,直接使用成员名即可;但容易产生命名冲突。后面定义的同名成员把前面的覆盖了

    3. 解决名称冲突的问题

      • 改用import这种方式
      • 自己避免使用同名
      • 使用别名解决冲突
  6. 模块的搜索路径

    1. 寻找模块的路径:内存 --> 内置函数 --> sys.path
    2. 引用在,内存、 内置模块 、sys.path中无法找到的模块
    import sys
    sys.path.append(r'模块路径')
    
posted on 2019-12-04 18:23  xingchenck  阅读(471)  评论(0编辑  收藏  举报