模块定义:
模块是一个包含有一系列数据、函数、类等组成的程序组
模块是一个文件,模块文件名通常以.py结尾.
作用:
让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
模块中的数据,函数,类等可提供给其它模块或程序使用
模块的分类:
内建模块(builtins) 在解析器的内可以直接使用
标准库模块, 安装python时已安装且可以直接使用
第三方模块(通常开源),需要自己安装
用户自己编写的模块(可以作为其它人的第三方模块)
模块的导入语句
import 语句
语法:
import 模块名1 [as 模块新名1], 模块名2 [as 模块新名2], ....
用法:
模块名.属性名
或
模块名.函数属性名(实参传参)
dir(obj) 函数返回所有属性的字符串列表
help(obj) 函数可以查看模块的相关文档字符串
from import 语句
语法:
from 模块名 import 模块属性名1 [as 属性新名1], 模块属性名2 [as 属性新名2], ....
作用:
将某模块的一个或多个属性导入到当前模块的作用域
from import * 语句
语法:
from 模块名 import *
作用:
将某模块的所有属性导入到当前模块
dir 函数:
dir([对象]) 返回一个字符串的列表
扫描二维码关注公众号,回复: 4066169 查看本文章说明:
如果没有给参数调用,则返回当前作用域内的所有变量的列表
如果给定一个对象为作参数,则返回这个对象的所有变量的列表
1) 对于一个模块,返回这个模块的全部属性
2) 对于一个类,返回这个类的所有变量,并递归基类对象的所有变量
3) 对于其它的对象,返回所有类变量和基类变量
自定义模块并导入
注意事项:
自定义模块的文件要求以.py结尾,文件名必须是标识符的规则
导入 语句 import 语句等 搜索块的路径顺序
搜索顺序:
1. 搜索程序运行时的路径(当前路径)
2. sys.path 提供的路径
sys.path是一个列表,里面放的都是模块的搜索路径
3. 搜索内建模块
模块的加载过程:
1. 在模块导入时,模块的所有语句都会执行
2. 如果一个模块已经导入,则再次导入时不会重新执行模块内的语句
模块以导入和执行的过程:
1. 先搜索相关的路径,找到模块名.py
2. 判断是否有此模块对应的.pyc文件。如果.pyc比.py文件新,则直接加载.pyc文件
3. 否则 用模块.py,文件生成.pyc,并加载执行pyc python的编译
编译 解释执行
mymod.py --------> mymod.pyc --------> python3
模块的属性
模块的 __doc__ 属性
此属性用于绑定模块的文档字符串模块的 __file__属性
此属性用于记录模块对应的文件路径名模块的 __name__属性
__name__属性 用来记录模块自身名字作用:
1. 记录模块名
2. 用来判断是否为主模块
说明:
当此模块为主模块(也就是第一个运行的模块时)运行时, __name__绑定 '__main__'
当此模块不是主模块时,而是被其它模块导入时,此时 __name__ 绑定模块名模块的 __all__列表
模块中的 __all__列表是一个用来存放可导出属性的字符串列表作用:
当用 from xxx import *语句导入时,只导入 __all__ 列表内的属性
模块的隐藏属性
模块中以'_'开头的属性,在from xxx import * 导入时,将不被导入,通常称这些属性为隐藏属性
包(模块包) package
包的定义
包是将模块以文件夹的组织形式进行分组管理的管理方法
作用:
将一系列模块进行分类管理,有利于防止命名冲突
可以在需要时加载一个或部分模块则不是全部模块
包示例:
mypack/
__init__.py
menu.py
games/
__init__.py
contra.py
supermario.py
tanks.py
office/
__init__.py
word.py
excel.py
powerpoint.py
__init__.py 文件
__init__.py是常规包内必须存在的文件
__init__.py会在包加载时自动调用作用:
1. 编写此包的内容
2. 在内部填写文档字符串
3. 在__init__.py文件内可以加载此包所依懒的一些其它模块
包的导入
同模块的导入规则
# import 语句
import 包名 [as 包新名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]# from import语句
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]# from import *语句
from 包名 import *
from 包名.模块名 import *
...
导入包时的索引路径顺序:
1. 搜索程序的当前路径
2. sys.path 提供的路径
__init__.py内的 __all__ 列表
作用:
用来记录此包中有哪儿些子包或模块在用from import *语句 时被导入
说明:
__all__列表只对 from xxx import *语句起作用
包的相对导入:
包的相对导入是指包内模块的相互导入
语法:
from 相对路径包或模块 import 属性或模块名
from 相对路径包或模块 import *
相对路径
. 代表当前目录
.. 代表上一级目录
... 代表上二级目录
.... 以此类推
注: 相对导入时不能超出包的外部