一、什么是模块?(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__文件中进行操作。(添加绝对路径或者相对路径)