python 模块基础概念
1、什么是模块?
【1】模块是一个包含有一系列数据、函数、类等组成的程序组
【2】模块是一个文件,模块文件名通常以.py结尾.
2、模块的文档字符串
模块内第一个没有赋值给任何变量的字符中称为模块的文档字符串
3、作用?
【1】 让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
【2】模块中的数据,函数,类等可提供给其它模块或程序使用
4、模块的分类?
标准库包含多个内置模块(以C语言编写)https://docs.python.org/zh-cn/3.7/library/index.html
【1】 内建模块(builtins),或者叫内置模块, 在解析器的内可以直接使用
【2】标准库模块, 安装python时已安装且可以直接使用。
【3】第三方模块(通常开源),需要自己安装
【4】用户自己编写的模块(可以作为其它人的第三方模块)
【1】【2】一般没什么区别,不需要自己安装。
5、模块的导入
名字太长,可以用 as 起别名。
【1】import 语句
① 作用: 将某模块整体导入到当前模块中 用法: 模块名.属性名 或 模块名.函数属性名(实参传参)
② 语法: import 模块名1 [as 模块新名1], 模块名2 [as 模块新名2], ....
③ 示例:
import math # 导入math模块
import sys, os 作用: 将某模块整体导入到当前模块中
④ 用法:
模块名.属性名 或 模块名.函数属性名(实参)
【2】from import 语句
① 作用: 将某模块的一个或多个属性导入到当前模块的作用域
② 语法: from 模块名 import 模块属性名1 [as 属性新名1], 模块属性名2 [as 属性新名2], ....
③ 示例: from math import factorial as fac
【3】from import * 语句
① 作用: 将某模块的所有属性导入到当前模块
② 语法: from 模块名 import *
③ 示例: from math import *
6、模块的加载过程:
【1】 在模块导入时,模块的所有语句都会执行
【2】 如果一个模块已经导入,则再次导入时不会重新执行模块内的语句
7、模块的重新加载
import xxx
import imp
imp.reload(xxx) # 重新加载 xxx 模块
8、导入模块时搜索模块的路径 搜索顺序
【1】 搜索程序运行时的路径(当前路径)
【2】 sys.path 提供的路径
sys.path是一个列表,里面放的都是模块的搜索路径
【3】 搜索内建模块
9、模块导入和执行的过程:
【1】 先搜索相关的路径,找到模块名.py
【2】 判断是否有此模块对应的.pyc文件。如果.pyc比.py文件新,则直接加载.pyc文件
否则,用 模块.py,文件生成.pyc,并加载执行
10、pyc python的编译
编译 解释执行
mymod.py --------> mymod.pyc ----------> python3
11、模块的属性
【1】__doc__ 属性
此属性用于绑定模块的文档字符串
【2】__file__属性
此属性用于记录模块对应的文件路径名
【3】__name__属性
用来记录模块自身名字
作用:
① 记录模块名
② 用来判断是否为主模块
其它说明:
① 当此模块为主模块(也就是第一个运行的模块时)运行时, __name__绑定 '__main__'
② 当此模块不是主模块时,而是被其它模块导入时,此时 __name__ 绑定模块名
【4】__all__列表
用来存放可导出属性的字符串列表。
当用 from xxx import *语句导入时,只导入 __all__ 列表内的属性
12、模块的隐藏属性
模块中以'_'开头的属性,在from xxx import * 导入时,将不被导入,通常称这些属性为隐藏属性