Python利用inpect模块实现函数参数类型检查

本文介绍了Python中利用inspect模块进行函数参数类型检查的方法,包括函数注解、inspect.signature对象的使用以及如何手动实现参数类型检查装饰器。通过装饰器结合inspect模块,可以动态绑定注解并进行参数类型验证。
摘要由CSDN通过智能技术生成

一丶函数注解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=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值