模块 Module

程序可以拆分成以.py结尾的模块,拆分相似的逻辑。

分开以后,把有关联的代码放在一起会更清晰,有利于合作开发。

不同文件之间的关联,将目标模块的成员导入到当前模块的作用域中。

1
2
3
4
5
# 你过来,面向过程比较多,因为用的是文件名。
import 模块 as 名称

# 主动过来,面向对象,直接可以拿来用。
from 模块 import 成员1, 成员1, 成员1

当名字有冲突的时候,遵循就近原则。但是我们要尽力避免冲突的产生。

常用的命名:

  • BLL 业务逻辑层 business logic layer
  • DAL 数据访问层 data access layer
  • USL 用户显示层 user show layer
  • model 模型层
  • main 程序入口代码

__name__ 显示模块名字,显示 __main__ 的时候意思是主模块,也就是第一次运行的模块/不是被导入的模块。

python是解释型语言,但为了提高运行速度,让 python 程序更快启动,python使用了一种编译的方法。

源代码 --> 编译–> 字节码 – >解释 --> 机器码

编译之后得到pyc文件,也就是pychache文件,存储了字节码(特定于Python的表现形式)。

if __name__ == '__main__' 要求从当前文件启动。

在模块导入时,模块的所有语句会执行。如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。

包 Packge

将模块以文件夹的形式进行分组管理。让一些相关的模块组织在一起,使逻辑结构更加清晰。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 语法
import# 将包中__init__模块内整体导入到当前模块中
importas 别名

# 使用
包.成员
别名.成员

# 语法
fromimport 成员 # 将包中__init__模块内的成员导入到当前模块作用域中
fromimport 成员 as 别名
fromimport * # 小心重名问题

# 使用
成员
别名

异常处理Error

异常是运行时检测到的错误。当异常发生时,程序不会再向下执行,而转到函数的调用语句。

  • 名称异常(NameError):变量未定义。
  • 类型异常(TypeError):不同类型数据进行运算。
  • 索引异常(IndexError):超出索引范围。
  • 属性异常(AttributeError):对象没有对应名称的属性。
  • 键异常(KeyError):没有对应名称的键。
  • 异常基类Exception。

raise 语句,主动抛出一个错误,让程序进入异常状态。在程序调用层数较深时,向主调函数传递错误信息要层层return比较麻烦,所以人为抛出异常,可以直接传递错误信息。

为了将程序由异常状态转为正常流程,我们使用以下语法进行异常处理:

1
2
3
4
5
6
7
8
9
10
11
12
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
处理语句1
except 错误类型2 [as 变量2]:
处理语句2
except Exception [as 变量3]:
不是以上任何错误类型的处理语句
else:
未发生异常的语句
finally:
无论是否发生异常的语句
  • as 子句是用于绑定错误对象的变量,可以省略。
  • except子句可以有一个或多个,用来捕获某种类型的错误。
  • else子句最多只能有一个。
  • finally子句最多只能有一个,如果没有except子句,必须存在。
  • 如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。