一. 模块
指一系列功能的集合体(模块名用小写和下划线组成)
模块的四个通用类别:1.使用python编写的.py 文件
2. 已被编译为共享库或DLL的C 或C++扩展
3. 把一系列模块组织到一起的文件夹
4. 使用c编写并链接到python解释器的内置模块
模块的三个来源: 内置模块 , 第三方模块, 自定义模块
使用模块的原因: 使用内置模块和第三方模块极大地提高了开发效率
使用自定义模块将程序各部分组件共用的功能提取放在一个模块中,其他组件可以调用该模块,减少代码冗余
导入模块: import + 模块名(首次导入模块会发生三件事)
1. 会产生一个模块的名称空间
2. 执行导入模块文件的内容,将产生的名字放到模块的名称空间里
3. 在当前执行文件中拿到名字例如read1, 该名字指向模块名称空间中的read1
( import + 模块名 ) vs ( from 模块名 import 功能名 )
import 优点: 引用模块中的名字必须加前缀,这样不会与当前名称空间冲突
缺点: 引用必须加前缀,不够简洁
from...import...: 优点 是引用不用加前缀,书写简洁
缺点:容易与当前执行文件名称空间名字冲突
在被调用文件spam中定义 __all__ :[' 函数1', '函数2'] 当用到 from spam import * 时只引用列表中的内容
当被调用文件中的可变类型改变时,内存地址不变,因此引用时该可变类型也跟着变
当被调用文件中的不可变类型改变时,内存地址发生了改变,因此引用时该不可变类型不变
模块的搜索路径: 1. 内存 2.内置模块 3. sys.path (环境变量,全局有效)
优先级: 内存 > 内置 > sys.path
被导入模块参照的也是执行文件为准的sys.path
区分path文件的两种用途:
1. 当文件被当做执行文件时 __name__值为__main__
2. 当文件被当做模块导入时 __name__值为模块名
文件开发的目录规范: bin ( 启动文件)===》 start.py
conf(配置文件)===》 settings.py
lib(自定义模块)===》 common.py
core(核心文件)====》 src.py
db( 数据文件)
log(日志)
readme(介绍软件)
import sys: 1. 可以把项目根目录加到环境变量(sys.path.append(r' 路径 '))
2.把项目根目录所在的绝对路径拿到,加到环境变量
os.path.abspath(__file__) 获得当前执行文件的绝对路径
os.path.dirname( ) 获取到执行文件所在的文件夹
获得ATM文件夹 之前的 目录( src.py==> core 文件夹 ===》 ATM文件夹)
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
日志模块要打开文件,将内容写入文件,打开文件的路径应在settings中设定
log_path=r' %slog ranscation.log' % BASE_DIR
总结:启动文件直接放在ATM文件下面,bin删除
将ATM文件放在顶级文件中