Your browser does not support the Canvas element.

模块

一、什么是模块?(what)

  自己无法实现需要用别人写好的功能。(可能是文件夹/py文件/C语言编译好的一些文件)

二、模块的好处。(why)

  1.可以进行分类管理。具有相同类型的写在一个模块中。比如所有有关时间的模块写在一个模块中。

  2.可以节约内存。模块在未调用之前都存在硬盘上。

  3.提供跟多的功能。

三、模块的分类。

  1.内置模块

    安装python解释器的时候自带的方法。

  2.第三方模块/扩展模块

    在安装python时没有带的一些功能,比如diango 模块。

  3.自定义模块

    自己写的一个功能,就可以看做一个模块。

四、模块如何使用?(how)

  第一种    import  

 

    1、通过 import + 模块名导入模块

    2、模块的命名规则和变量命名规则相同。且首字母小写。

       3、import  + 模块名 相当于执行了这个模块所在的py文件。

      4、一个模块不能被重复导入。(重置除外)

    5、多个模块可以在一行被同时导入。(eg: import a, b, c...)但根据PEP8规范,一行倒入一个模块。

      模块导入的顺序是:内置模块>>>第三方模块>>>自定义模块

    6、模块的重命名。 

      import  my_module as bbb

      就相当于将这个模块重命名为bbb , 但是并没有修改这个py文件的名字,只是在本文件中调用该模块的时候,可以用bbb代替。

    7、工作原理

      

    第二种  from ···import···

 

        1、from ···import···  相当于执行了整个模块的py文件。

        2、from + 模块 + import +导入内容

           导入什么用什么,没有导入的就不能用。但不代表不存在,只是没有在该文件中建立到模块中其他变量或方法的引用。

        3、当导入的模块中的变量或者方法 和 文件中的变量或方法重名时,那么这个名字只代表最后一次对他赋值的变量或方法名。(要不在文件中出现和模块重名的情况 )

        4、文件中对全局变量的模块中的变量的是完全不会影响到。

        5、重命名和 import 一样。

        6、from 模块 import * 是将模块中的所有变量导入文件。和 import不同的是 调用形式。

      

      7、__all__可以控制*导入文件的内容。

      当在模块中写入__all__ = [变量名],此时进行 from 模块 import * 的时候,就只会导入写在__all__ 的列表中。没有写入的变量将不会被导入。

五、把模块当脚本运行。

      脚本运行:

          __name__ = __main__   就是脚本运行。

      模块运行:

          __name__ = '模块名'

      if __name__ = __main__ :  如果希望被当做模块导入的时候有些代码不想被执行,就可以写在 if __name__ = __main__下边。

      是一个条件判断,如果是在本文件中执行的,才会输出这个条件语句下边的内容。

六、模块的搜索路径。

      1、模块的搜索路径完全存储在sys.path里表中。

      

import sys
print(sys.path)

      2、导入模块的顺序是从前往后,找到一个符合条件的就停止寻找。

      3、如果要导入的模块和当前执行文件在同一级,可以直接导入。

      如果要导入的模块和当前执行文件不在同一级,需要将模块的绝对路径添加到sys.path 列表中。

      4、模块能否被导入就看这个模块的绝对路径在不在这个sys.path列表中,如果没有需要将模块的绝对路径添加到sys.path列表中。否则

        import 模块名  就会报错:  ModuleNotFoundError : No module named '模块名'

 


七、模块的重新加载。

      importlib.reload(变量名)  对   导入的模块重新加载,如果期间有变量发生变化,重新加载后会被修改。(极不推荐使用)。

八、包

      1、从包中导入模块,要看这个包所在的目录是否在sys.path列表中。

      2、直接导入一个包相当于执行了这个包中的__inin__文件,并不会把这个包下的其他包或者py文件导入内存。

         如果要导入一个包就想执行包里边的所有内容,需要在__init__文件中进行操作。(添加绝对路径或者相对路径)

 

        

 

        

 

posted @ 2018-08-03 17:00  一根小菜  阅读(180)  评论(0编辑  收藏  举报
Your browser does not support the Canvas element.