自定义函数强制类型检查的装饰器
来源:互联网 发布:2016年年残保金的算法 编辑:程序博客网 时间:2024/06/03 23:41
这是一个例子关于为函数添加强制性类型检查功能。使用装饰器实现。
特点:可以只对部分参数,类型进行检查。
from inspect import signature #可以检查数字签名from functools import wrapsdef typeassert(*ty_args, **ty_kwargs): #传入装饰器指定类型. def decorate(func): if not __debug__: #如果__debug__被设置为False就返回未经修改的函数。 return func sig = signature(func) #函数允许我们从一个可调用对象中提取出参数签名信息。 bound_types = sig.bind_partial(*ty_args, **ty_kwargs).arguments #bind_partial提供的类型到参数名做部分绑定,形成一个字典。输入的类型名和被装饰函数的参数进行绑定。 @wraps(func) #保留元数据。 def wrapper(*args, **kwargs): #传入被装饰函数的参数。 bound_values = sig.bind(*args, **kwargs) #bind()也是进行绑定,当时不许减少参数,被装饰函数的变量名和输入参数绑定为一个字典。 for name, value in bound_values.arguments.items(): #拿出被装饰名字和值 if name in bound_types: #拿出装饰器内有的输入x。 if not isinstance(value, bound_types[name]): #被装饰函数值类型是不是装饰器要求值, raise TypeError( #触发异常。 'Argument {} must be {}'.format(name, bound_types[name]) ) return func(*args, **kwargs) return wrapper return decorate@typeassert(int, int)def add(x, y): return x + yprint(add(2 , 3))add(2, 'fff')
执行结果
参考自:《python cookbook》
(完)
阅读全文
0 0
- 自定义函数强制类型检查的装饰器
- python装饰器的4中类型:函数装饰函数、函数装饰类、类装饰函数、类装饰类
- 函数的强制类型转换
- C#自定义类型的强制转换
- 利用装饰器给python的函数加上类型限制
- 函数指针的强制类型转换
- 函数指针的强制类型转换
- 函数指针的强制类型转换
- 函数指针的强制类型转换
- C#自定义类型强制转换
- 函数类型,函数名是函数指针吗,函数的强制类型转换
- 实参类型的强制转换(重载函数的匹配)
- 强制类型转换函数使用说明
- 函数指针强制类型转换
- 强制转换函数指针类型
- 函数指针强制类型转换
- Lua强制类型转换函数
- 函数指针强制类型转换
- Java设计模式——装饰者模式(Decorator Pattern)
- 欢迎使用CSDN-markdown编辑器
- elasticsearch 索引存储深入详解
- 【20170925】JAVA每日一练
- C++11 新知识点
- 自定义函数强制类型检查的装饰器
- 一元多项式的乘法与加法运算
- CreateThread函数
- linux下的中文输入法
- git 中一些经常出现的错误的总结
- c++ singleton pattern
- kafka0.8版本和sparkstreaming整合的两种不同方式
- 一元多项式求导
- centos安装中文输入法