Python之装饰器的实例
1.1装饰器的应用:参数类型检查 函数参数的检查,一定是在函数外 函数应该作为参数,传入到检查函数中 检查函数拿到函数传入的实际参数,与形参声明对比 __annotations__属性是一个字典,其中包括返回值类型的声明。假设要做位置参数的判断,无法和字典中的声明对应。使用inspect模块 inspect模块:提供获取对象信息的函数,可以检查函数和类、类型检查 from functools import wraps import inspect def check(fn): @wraps(fn) def _check(*args,** kwargs): sig = inspect.signature(fn) params = sig.parameters # 传入的参数是有序的字典,标识的是函数的签名 keys = list(params.keys()) # 把形参的参数从字典中提取出来,利用list函数迭代出来,在利用索引取值 values = list(params.values()) # 把形参的参数注解的类型拿到,用list函数迭代,在利用索引取值 for k,v in enumerate(args): # args实参迭代,k可以利用在索引取值上 print ( ' k={},v={} ' .format(k,v)) if isinstance(v,values[k]