1、模块 Module
什么是模块?
模块是一个包含有一系列数据,函数,类等组成的程序组
模块是一个文件,模块文件名通常以.py结尾
作用:
让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰模块中的数据,函数和类等可提供给其它模块或程序使用
分类:
内置模块,在解析器的内部可以直接使用(通常用C语言编写的)
标准库模块,安装python时已安装且可以直接使用
第三方模块(通常为开源), 需要自己安装
下载安装命令:
$ pip3 install 模块名
如:
$ pip3 install tensorflow
用户自己编写的模块(也可以作为其它人的第三方模块)
2、模块的导入 import 语句
1、import 语句
语法:
import 模块名1 [as 模块新名1], 模块名2 [as 模块新名2]
作用:
将某模块整体导入到当前模块中
用法: 模块名.属性名 示例: import math print(math.factorial(5)) import time, sys import math as m dir(obj) 函数返回模块内的所有属性的字符串列表 help(obj) 函数可以查看模块相关的文档字符串
2、from import 语句
语法:
from 模块名 import 模块属性名1 [as 属性新名1],
模块属性名2 [as 属性新名2], ...
作用:
将某模块内的一个或多个属性导入到当前模块的作用域
示例: from math import factorial as fac from math import sin, cos from math import pi print(sin(pi/2))
3、from import *语句
语法:
from 模块名 import *
作用:
将某模块的所有属性导入到当前模块
示例: from math import * print(sin(pi/2)) print(factorial(6))
3、dir 函数:
dir([obj]) 返回一个字符串列表
作用:
如果没有参数调用,则返回当前作用域内的所有变量的列表
如果给定一个对象作为参数,则返回这个对象的所有变量的列表
对于一个模块,返回这个模块的全部变量
对于一个类对象,返回类对象的所有变量,并递归其类对象的所有变量
对于其它对象返回所有变量、类变量和基类变量
4、自定义模块并导入
要求:
模块文件名后缀必须以.py结尾
模块文件名必须是合法的标识符
避免名称和内建模块冲突
导入方式:
import 语句
from import 语句
from import * 语句
# mymod.py '''这是mymod 模块的文档字符串的标题 这个模块有两个函数的两个数据 ... 此处省略200行 ''' def myfac(n): print("正在计算%d的阶乘" % n) def mysum(n): print("正在计算1+2+3+....+",n, '的和') name1 = "Audi" name2 = "tesla" print("mymod模块被加载!!!") print("mymod.__name__ 绑定的是:", __name__)
# 此示例示意导入并调用mymod中的模块 import pdb import mymod name2 = "bbbbbb" # 在当前模块内创建全局变量 print('test_mymod.py里的全局变量name2=',name2) mymod.myfac(6) print(mymod.name1) from mymod import mysum mysum(100) from mymod import * print(name2)
5、import 语句 搜索模块的路径顺序
1. 搜索内建模块
2. 搜索程序运行时的路径
3. sys.path 提供的路径
sys.path绑定一个列表,列表里是模块的搜索路径
全局变量是模块内全局(全局变量能只在当前模块内有效)
6、模块的加载过程
在模块导入时,模块的所有语句会执行
模块被导入和执行的过程
1. 先搜索相关路径找模块(.py)
2. 判断是否有此模块对应的.pyc文件 ,如果.pyc文件比.py文件新,则直接加载.pyc
3. 否则用模块.py文件生成.pyc并加载执行
模块的编译
编译 解释执行
mymod.py ------> mymod.pyc -------> python3
7、模块的属性
__doc__属性
用于绑定模块的文档字符串
__file__ 属性
用于绑定模块对应的文件名的路径
__name__ 属性
用来记录模块自身的名字
作用:
1. 记录模块名
2. 用来判断是否为主模块
说明:
当此模块作为主模块运行时,__name__绑定 '__main__'
当此模块不是主模块运行时,__name__绑定文件名
模块的__all__列表
模块中的__all__列表是一个用来存放可导出属性的字符串列表
作用:
限定当用from xxx import *导入时,只导入__all__列表内的
# 此示例示意模块内的__all__列表的作用和用法 # __all__列表限定在用from mymod2 import * 时,只导入 # dowork 和 name1 __all__ = ['dowork', 'name1'] def dowork(): f1() f2() def f1(): print("第一步....") def f2(): print("第二步....") name1 = 'aaaaaa' name2 = 'bbbbbb'
模块的隐藏属性
模块中以 下划线(_) 开头的属性, 在from xxx import *语句
导入时将不被导入,通常称为隐藏属性
# 此示例示意模块的隐藏属性 import copy def f1(): pass def _f2(): pass def __f3(): pass name1 = "aaaaa" _name2 = 'bbbbb'