- 1.介绍
- 在python中一个py文件就是一个模块
- 好处:最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。
- 2.查看模块的位置
- 模块.__file__
- 3.模块的导入和使用方法
- 1.import
- import 模块名
- 模块.方法(参数)
- 对象=模块.类名(参数)
- print(模块.全局变量)
- 2.from 模块名 import 全局变量,类,函数名 --》可以导入多个用逗号隔开
- 无需加模块名 ,直间调用
- print(全局变量)
- 方法(参数)
- 对象=类名(参数)
- 3.from 模块名 import *
- 无需加模块名,直接调用
- 在模块中可以添加 __all__=[] --》对于前两种导入方法无效
- 如果一个文件中有__all__变量,那么也就意味着这个变量列表中的元素,会被from xxx import *时导入
- 当有些功能你不像让别人用的时候就可以使用这种方式。
- 1.import
- 4.查看模块搜索顺序
- import sys print(sys.path)
- 5.自定义模块
- 当我们在模块中测试自定义模块的时候
- if __name__=="__main__":
- 测试体
- 当没有使用 if __name__=="__main__":
- 其他地方导入模块也会执行测试体的语句
- print(__name__) 在本模块中,显示结果为"__main__"
- 在被导入的情况下,显示结果为模块名
- 6.python 包
- 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。
- 有效避免模块名称冲突问题,让应用组织结构更加清晰
- 导入包的模块
- 1.import 包名.模块
- 使用 print(包.模块.全局变量) 包.模块.方法(参数) 对象=包.模块.类名(参数)
- 2.from 包名 import 模块名
- 使用 print(模块.全局变量) 模块.方法(参数) 对象=模块.类名(参数)
- 3.from 包名 import *
- 包文件夹下必须有 __init__.py 文件 --》 对于前两种方法无效
- 在__init__.py 文件中定义__all__变量,那么也就意味着这个变量列表中的元素,会被from 包名 import *时导入
- __all__=["模块1","模块2"。。。] 需要加载的模块
- 当导入模块时,执行 __init__.py 中的代码
- __init__.py 中的函数调用方法 :1.import 包名 2.包名.函数名()
- 1.import 包名.模块
- 7.打包模块
- 1.和包同一级目录下创建setup.py 编辑
- from distutils.core import setup
- setup(name="名字", version="1.0", description="描述", author="作者", py_modules=['msg.sendmsg', 'msg.recvmsg', 'msg.money.msgmoney'])
- 2.当前目录下执行命令 python setup.py build 构建模块
- 3.生成发布压缩包执行命令 python setup.py sdist ——》压缩包文件名:名字-1.0.tar.gz
- 1.和包同一级目录下创建setup.py 编辑
- 8.安装模块
- 1.tar -zxvf 名字-1.0.tar.gz 解压缩模块压缩包
- 2.进入压缩后文件夹执行 sudo python setup.py install
- 3.默认安装到 /usr/local/lib/python3.6/dist-packages
- 4.使用 import 包名.模块名
- 9.扩展
- 1.动态添加模块搜索路径
- import sys
- sys.path.insert(下标,"路径")
- 2.交互式模式下,导入模块后,模块更新
- from imp import *
- reload("模块名")
- 3.循环导入
- 1.
- A模块导入B模块具体函数 from B import test1
- B模块导入A模块具体函数 from A import test2
- 执行A或B报错 importError 循环导入
- 2.
- from A import *
- NameError 未定义
- 1.
- 4.hashlib 模块 加密算法
- import hashlib
- m=hashlib.md5() -->创建对象
- m.update("你好".encode("utf-8")) -->encode 解码
- print(m.hexdigest()) --》加密后内容
- 5.查看系统默认模块
- sys.modules()
- 1.动态添加模块搜索路径
python 模块
