python基础17 模块

182 阅读4分钟

迭代取值与索引取值的差异

  • 迭代取值:
    • 优点:是通用的取值方式
    • 缺点:开始后只能从前往后调用不能回退
  • 索引取值:
    • 优点:想取哪个值取哪个,可以重复取
    • 缺点:对于无序的容器类型,不能使用

模块

模块的介绍

  • 什么是模块?
    • 模块是一系列功能的结合体(使用模块就能得到一系列功能)
  • 模块的分类
    • 内置模块(解释器自带)
      import time
      time.sleep(2)
      
    • 自定义模块(自己写的)
    • 第三方模块(别人写的,需要在网络上下载)
      人脸识别,语言识别等
      
  • 模块的表现方式
    • 1.py文件还有包含多个py文件的文件夹
    • 2.已被编译为共享库或DLL的c与c++扩展(了解)
    • 3.使用C编写并链接到python解释器的内置模块(了解)
  • 补充说明
    • 项目py文件的命名必须是英文的(模块名称也是纯英文)
    • py文件当作模块导入不需要考虑后缀

模块的导入

模块导入的两种句式

    1. import 模块名
    • 详解:
    1.执行文件是当前import所在py文件,被导入的是模块名.py文件
    2.同一个程序反复导入相同的模块,导入语句只会执行一次
    3.不加模块名就使用的执行文件的里的名字
    
    • 导入流程
    import 模块名
    print(模块名.py)
    

    image.png

    • 优缺点
    优点:通过模块名点的方式可以使用到模块内的所有名字,不会产生冲突。
    缺点:模块名什么名字都可以使用,苦茶子都没有了。
    

    image.png

    1. from 模块名 import 模块名里的名字(可以有多个)
    • 详解:
    1.执行文件是当前import所在py文件,被导入的是模块名.py文件里的名字
    
    • 导入流程
    from 模块名 import 模块名内的名字
    print(模块名内的名字)
    
    • 优缺点
    优点:可以指定使用名字,不会被扒光。不用加模块名前缀
    缺点:名字容易产生冲突
    

补充知识

  • 1.起别名
    • 多个模块由不同人文件名相同
    from md import money as md_my
    from md1 import money as md1_my
    print(md_my)
    print(md1_my)
    
    • 原有文件名复杂
    import mdddddddddd as md
    
  • 2.导入多个名字
    • 多个模块功能相似才能一起导入,不然尽量分开
    • 出自同一个模块可以一起导入
    不同模块功能不同:
    import time, sys, os                  NO
    
    import time
    import os
    import sys                            YES
    
    同一个模块:
    from md import money, read1, read2    YES
    
  • 3.全导入
    • 需要使用模块名称空间很多的名字只能使用form...import...
    from md import *                 *号表示所有
    在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字
    

循环导入

  • 两个文件彼此互导称为循环导入
  • 循环导入没有准备好,就被使用会报错
  • 尽量避免循环导入,万不得已就让所有名字提前做好准备。

文件类型的判断

  • 所有py文件都自带__name__内置名
    • 执行: 双下name的结果是双下main
    • 被导入: 双下name的结果是模块名
  • 双下name一般用于开发模块的作者测试自己的代码
    if __name__ == '__main__':
      	当文件是执行文件的时候才会执行if的子代码
     上述判断一般只出现整个程序的启动文件中
    
  • pycharm中可以直接编写main按tab键自动补全

模块的查找

  • 查找顺序
    • 内存>>>内置>>> sys.path
    1.导入一个文件,运行时删除该文件,还能使用
         运行时,还在内存存了一份
      import md
      import time
      time.sleep(15)
      print(md.money)
      
    2.创建一个跟内置模块名相同的文件名
          创建的模块文件尽量不要和内置发生冲突
      from time import name
      print(name)
    3.导入模块的时候要知道谁是执行文件
          所有的路径都是参照执行文件的
      import sys
      sys.path.append(r'目标文件所在路径')
      import mdd
      print(mdd.name)
    
  • 方式:
    • 1.通用
    sys.path.append(目标文件所在路径)
    
    • 2.form...import...句式
    form 模块文件名字/模块内名字所在相对路径 import 模块文件名/模块内名字