模块

一、模块:

  1. 什么是模块:模块是一些功能的集合体,(最小的模块就是包含了一组功能的python文件)可以通过导入模块来重复使用模块里的所有功能。
  2. 模块的四个通用类别:
    1. 使用python编写的.py文件。
    2. 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
    3. 已经被编译为共享库或DLLCC++扩展
    4. 使用C编写并链接到python解释器的内置模块
  3. 为什么要用文件:1从文件级别组织程序,更方便管理。

                    2拿来主义,提升开发效率。

 

二、Import的使用:(导入模块)

1、模块可以包含可执行语句和函数,模块名第一次遇到导入import语句时才被执行,针对同一个模块可以在程序中的任意位置多次导入。

(注意:同一个模块在进行多次import时,只有第一次导入时才执行模块内部代码,其余import不执行模块内部代码,)

2、注意:在第一次导入后,模块就被加载到内存,此处注意查找模块的优先级顺序为:    内存、内置函数、环境变量(sys.path),所以模块内部保存在内存中的值有可能会在执行时被改变。

3、在第一次导入模块时会做三件事情,重复导入会直接引用内存中已经加载好的结果:

  1. 为源文件(导入的模块)创建名称空间。(在模块中定义的函数和方法若是使     用到了global 时,访问到的就是这个名称空间)
  2. 在新创建的命名空间中执行模块中包含的代码。将产生的名字丢到模块的名称 空间里。
  3. 创建以模块名来引用该命名空间。

(注意:每个被导入的模块都有自己独立的名称空间,定义在这个模块中的函数把这个名称空间当做全局名称空间,与使用者的全局变量不冲突)

4、import spam as sm      (模块改名)

      可以应用于if 判断,比如选择不同的阅读方式:导入多种不同的阅读方式模块,并将每一个模块名都改名为sm。最后通过if 选择要导入一个模块,不管导入到的是哪一个都能执行sm.func()  

  5.import 可以在一行导入多个模块:

     Import sys ,os,re

  1. 总结import:(访问模块中的变量时,必须加前缀,不会冲突)

        优点:指名道姓地问某一个名称空间要名字,不会与当前执行文件名称空间中的名字冲突。

缺点:引用模块中的名字必须加前缀,不过简洁

三、from ...import...的使用:

  1. from 模块名 import 模块中的函数名等:直接将该模块中的该名字直接导入当前

名称空间。

    from 文件夹名 import 模块名:将文件夹中的模块导入当前名称空间

       

  1. form模块名 import *   :表示把该模块中的所有不是以下划线(_)开头的名字

都导入当前位置。

 

优点:在当前名称空间中,直接使用名字就可以了,无需加前缀。

缺点:容易与当前执行文件中的名字冲突。

其余与import均无区别,也可以进行相应操作,如改名,一行多个名字等等。

 

四、模块循环/嵌套导入抛出异常的原因是由于在python中,模块被导入一次之后,重新导入,只会在第一次导入时执行模块内的代码。

 

五、py文件区分的两种用途:模块与脚本

  1. 脚本:一个文件就是整个程序,用来被执行。内置全局变量__name__的值为”__main__”
  2. 模块:文件中存放着一堆功能,用来被导入使用。内置全局变量__name__的值为模块名。

可以用内置全局变量__name__进行判断。

 

六、模块搜索路径:

  1. 模块的查找顺序:内存中已经加载好的模块-->内置模块-->sys.path中包含的模块。

 

           按照顺序依次查找。如果内存中有,直接引用,不重复执行代码

           定义的模块名不应该与内置的模块重名。

     

  1. 路径的插入方式有两种,分别问append(路径)insert(0,路径)insert方法插入能够将路径插在列表的第一位,这样会优先被加载。
posted @ 2018-12-04 18:47  学习汪  阅读(149)  评论(0编辑  收藏  举报