模块

目录

  • 迭代器与索引取值的差异
  • 模板的简介
  • 导入模块的两种语法句式
  • 导入模块句式的其他用法
  • 循环导入问题
  • 模块查找顺序

迭代器与索引取值的差异

  • 索引取值的优缺点

    优势:可以随意反复的获取任意数据值

    劣势:对于无序的容器类型无法取值

  • 迭代取值的优缺点

    优势:提供了一种通用的取值方式

    劣势:取值一旦开始,就不能取取过的值

模块

  • 模块的简介

    ​ 模块就是各种功能的结合形式

    ​ 使用模块就相当于使用了模块当中的所有功能

  • 模块的分类

    分类 作用
    内置模块 解释器自带的模块,直接可以使用
    自定义模块 自己所编写的模块,自己单独定义一个模块,然后由主界面进行调用
    第三方模块 别人所编写的模块,存于网络,用时需提前下载
    1. 内置模块

      ​ 解释器自带的模块,直接可以使用

      ​ 如:time

    2. 自定义模块

      ​ 自己所编写的模块

      ​ 自己单独定义一个模块,然后由主界面进行调用

    3. 第三方模块

      ​ 别人所编写的模块,存于网络,用时需提前下载

  • 模块的表现形式

    1. py文件(py文件也可以称作为模块文件)
    2. 含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
    3. 已经被编译成共享库等
    4. 使用C编写并链接到python解释器的内置模块

导入模块

  • 导入模块的句式

    模块导入句式 运行流程

    import句式
    1.会产生执行文件的名称空间。
    2.产生被导入文件的名称空间并运行该文件内的所有代码。
    3.通过在执行文件中获取模块的'名字.'的方式可以使用到被导入文件名称空间中的名字

    from...import...句式
    1.创建执行文件的名称空间
    2.创建被导入文件的名称空间
    3.执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中
    4.在执行文件中获取到指定的名字 指向被导入文件的名称空间

    ​ import句式流程:

    image

    from...import...句式流程:

    image

    同一个程序反复导入相同的模块 导入语句只会执行一次

  • 两种导入句式的优缺点

    模块导入句式 优点 缺点
    import句式 通过'模块名'点的方式可以使用到模块内所有的名字 并且不会冲突 '模块名'什么都可以点 有时候并不想让所有的名字都能被使用
    from...import...句式 指名道姓的使用指定的名字 并且不需要加模块名前缀 名字及其容易产生冲突(绑定关系被修改)
  • 补充知识

    1. 模块名称的创建

      ​ 以后真正的项目中 所有的py文件名称都是英文
      ​ 没有所谓的编号和中文

      ​ py文件被当做模块导入的时候不需要考虑后缀

    2. 起别名

      1. 多个模块文件名相同(多个人写)

        from md import money as md_my
        from md1 import money as md1_my
        print(md_my)
        print(md1_my)
        
      2. 原有的模块文件名复杂

        import mdddddddddd as md
        

        当原有的模块过于复杂时,可以通过as方法将原模块名转换成其他简单的变量名接收

      3. 导入多个名字

      当导入多个名字时,可将不类型的模块分开导入
      
      ~~~python
      import time
      import os
      import sys
      
      
      from md import money, read1, read2	
      上述导入方式是推荐使用的 因为多个名字出自于一个模块文件
      ~~~
      
      1. 全导入

        需要使用模块名称空间中很多名字 并且只能使用from...import句式

        from md import * ""表示所有
        ps:针对"
        "号的导入还可以控制名字的数量
        在模块文件中可以使用__ all __ = [字符串的名字]控制*能够获取的名字

循环导入问题

  • 什么是循环导入

    ​ 循环导入就是两个文件彼此导彼此

  • 循环导入的问题

    ​ 循环导入容易出现报错现象
    ​ 使用彼此的名字可能是在没有准备好的情况下就使用了

  • 如何解决循环导入

    ​ 彼此在使用彼此名字之前 先准备好

  • 温馨小提示

    循环导入将来尽量避免出现!!! 如果真的避免不了 就想办法让所有的名字在使用之前提前准备好

判断文件类型

  • 如何判断文件类型

    ​ 所有的py文件中都自带一个__ name __ 内置名
    ​ 当py文件是执行文件的时候 __ name __ 的结果是 __ main __
    ​ 当py文件是被导入文件的时候 __ name __ 的结果是模块名(文件名)

  • 开发模块着如何测试自己的代码

    ​ 通过__ name__ 的方式

    if __ name __ == '__ main __':
    当文件是执行文件的时候才会执行if的子代码

模块的查找顺序

  • 模块查找的先后顺序

    1.先去内存中查找
    2.再去内置中查找
    3.再去sys.path中查找(程序系统环境变量)

  • 具体查找流程

    1. 导入一个文件 然后在导入过程中删除该文件 发现还可以使用

      import md
      import time
      
      time.sleep(15)
      print(md.money)
      

      能成功运行是因为,在程序运行阶段,先代码储存到了内存中,直接运行的内存中的代码,在运行期间把调用的文件删除对此次结果没有影响,但当此次运行结束之后,再次运行则会报错。

    2. 创建一个跟内置模块名相同的文件名

      	 # import time
          # print(time.time())
          from time import name
          print(name)
      

      ​ 创建模块文件的时候尽量不要与内置模块名冲突,如若起冲突则会优先调用内置的模块。

    3. 导入模块的时候一定要知道谁是执行文件,所有的路径都是参照执行文件来的

      import sys
      sys.path.append(r'D:\pythonProject\day22\xxx')
      import mdd
      print(mdd.name)
      

      1.通用的方式
      sys.path.append(目标文件所在的路径)
      2.利用from...import句式
      起始位置一定是执行文件所在的路径
      from xxx import mdd

posted @ 2022-07-13 17:00  Nirvana*  阅读(55)  评论(0)    收藏  举报