模块定义
- 一个py 文件就是一个模块
- 三层架构: 总(分析功能,分配功能)-->分(给每个文件分配任务)-->总(将所有功能综合起来)
- 可以增加程序的健壮性和可读性,
- 增加开发效率
模块的来源
- python解释器内置的模块(直接import调用)
- 自己写的文件
- 别人写好的成熟模块(先用 pip install,再import)
模块的存在形式
- 单模块
- 自己定义的功能所在的py文件
- 包
- 将多个Py文件放到一个文件夹下
- 必须有__init__.py文件
import语句发生的内部原理
- 前提是有一个py文件,并且有自己的名称空间
- 通过import导入模块,将所有源代码执行一变
- 如果没有调用函数,则不会调用,而是检索到所有函数地址
- 自动创建一个当前文件的名称空间,与自己的名称空间合并
- 我们通过模块名.属性名来调用模块中的对象
多模块导入
- 单独导入
- import a,b,c,d,...
- 单独导入
- import a
- import b
- import c
详细导入语法
- 只想要具体的指定的参数或者方法
- from a import b
- 这样导入可以不用模块.b了
- 直接b领用
- 导入模块中的所用方法
- from a import *
对导入的模块/模块中的对象重命名
- import a as b #把a模块改名为b,调用时如下:
- b.方法
- 在模块与原文件对象重复时
循环导入问题
定义:
- a调用b,b调用a
解决方法
- 直接将导入模块的语法放到最后
- 会导致没得用
- 放到指定的函数内部,只要函数不调用就不会触发导入语句
搜索模块的优先级
-
查找模块时的查找顺序
- 模块分类
- 纯python编写的模块
- 内置的一系列模块,包括Python解释器自带的和已经用pip install的
- 使用C语言编写的底层代码
- C和C++扩展的模块
- 加载从下往上
- 查找从上往下
- 模块分类
-
查找顺序
-
相对路径
- 不给路径就默认在当前目录
- ./当前目录
- ../上层目录
-
绝对路径
-
sys.path
-
-
包
包的定义
- 模块的集合文件夹,必须包含init方法
包的创建
- pycharm右键python package,会自动生成init文件
包的使用
-
直接导入
-
from 包 import 模块 使用: 模块.方法()
-
-
先在init中注册:init就相当于包的目录
-
init注册: from .模块 import 方法 使用: from 包 import 方法 方法() 原因:导入包时,多了一步操作就是先在init里匹配方法,找不到然后再挨个模块查找
json模块
json用途:
- 序列化
- 将python中的字典、列表等类型转换为字符串
- 类型强转也可以实现,但是不能转回(不可逆)
- 反序列化
- 将python中的字符串转换wield字典、列表等类型
导入
-
import json: with open('file.json','w',encoding='utf8') as p: json.dump(user_dict,fp) 写入内容单引号会自动转换为双引号,然后保存。 可以实现将字典以字符串格式写入文件,读取时还是字典
json文件转为python对象
import json:
with open('file.json','w',encoding='utf8') as p:
json.load(fp)
读取时还是字典
转换:反序列化
- data_json_str =json.dumps(obj) #把字典转为了字符串
- data_dict = json.loads(obj) #把字符串转为了字典
json保存数据时的特点
- 中文内容会自动保存为二进制
- 解决方法:ensure_ascii = False 就可以在写入时不被写成asscii码