def typeassert(*ty_args, **ty_kwargs): """ 利用装饰器对函数参数强制性类型检查 enforcing type check on function using decorator :param ty_args: :param ty_kwargs: :return: """ def decorate(func): # If in optimized mode, disable type checking if not __debug__: return func # Map function argument names to supplied types sig = signature(func) bound_types = sig.bind_partial(*ty_args, **ty_kwargs).arguments @wraps(func) def wrapper(*args, **kwargs): bound_values = sig.bind(*args, **kwargs) # Enforce type assertions across supplied arguments for name, value in bound_values.arguments.items(): if name in bound_types: 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, z=int) def spam(x, y, z=42): """ :param y: :param z: :return: """ print(x, y, z) #https://github.com/yidao620c/python3-cookbook/blob/master/source/c09/p07_enforcing_type_check_on_function_using_decorator.rst
标签:function,return,ty,python,enforcing,args,bound,kwargs,type From: https://www.cnblogs.com/geovindu/p/17484038.html