一丶函数注解Function Annotations
- 函数注解
- python3.5引入
- 对函数的参数进行类型注解
- 对函数的返回值进行类型注解
- 只读函数参数做一个辅助的说明,并不对函数进行类型检查
- 提供第三方工具,做代码分析,发现隐藏的BUG
- 函数注解的信息保存在__annotations__属性中
In [1]: def add(x: int, y: int) -> int:
return x + y
In [2]: add.__annotations__
Out[2]: {
'x': int, 'y': int, 'return': int}
- 变量注解
- python3.6引入,只是一种对变量的说明,非强制
r: int = add(1,2)
- 业务应用
- 配合装饰器和inpect模块可以进行函数参数类型的检查,下一节将介绍inpect模块的用法
二丶inpect模块
官方文档:inpect模块提供给了一些有用的函数帮助获取对象的信息,例如模块、类、方法、函数、回溯、帧对象以及代码对象。例如他可以帮你检查类的内容,获取某个方法的源代码,取得并格式化某个函数的参数列表,或者获取你需要显示的回溯的详细信息。
该模块提供了四种主要的功能:类型检查、获取源代码、检查类与函数、检查解释器的调用堆栈。
下面我们将就inspect模块的检查函数和类以及类型检查进行分析。
1.类型和成员
In [4]: inspect.isfunction(add) # 是否为函数
Out[4]: True
In [5]: inspect.ismethod(add) # 是否为类的方法
Out[5]: False
In [6]: inspect.isgenerator(add) # 是否是生成器对象
Out[6]: False
In [7]: inspect.isgeneratorfunction(add) # 是否是生成器函数
Out[7]: False
In [8]: inspect.isclass(add) # 是否是类
Out[8]: False
In [9]: inspect.ismodule(add) # 是否是模块
Out[9]: False
In [10]: inspect.isbuiltin(add) # 是否是内建对象
Out[10]: False
上面只列举了一些常用的is检查类型函数,需要更多的可以查阅官方文档。
2.使用signature对象获取签名
函数签名包含了一个函数的信息,包括函数名、他的参数类型、他的所在的类和名称空间以及其他信息。
- inspect.signature(callable,*,follow_wrapped=True),返回可调用对象的signature对象
In [18]: def add(x:int, y:int, *args, m=