python装饰器看上去并没有任何参数(使用 @ 时被装饰的方法作为隐式参数传递给装饰器)。但是,有时候让装饰器自带一些参数,可以提供更灵活的应用。
python带参数的装饰器实例
我们改写 requires_ints,使其还可以限制被装饰函数的参数的数量:
from functools import wraps def requires_ints(count=0): def decorator(func): @wraps(func) def wrapper(*args, **kwargs): values = [i for i in kwargs.values()] args_list = list(args) + [i for i in kwargs.values()] if count == 0: # Not limit pass elif len(args_list) > count: raise Exception(f'The number of arguments cannot more than {count}') for arg in args_list: if not isinstance(arg, int): raise TypeError('Only accept integers.') return func(*args, **kwargs) return wrapper return decorator @requires_ints(5) def add(*args): '''Return the sum of all arguments''' return sum(args)
以上就是python带参数装饰器的写法,希望能对大家有所帮助,更多知识尽在python教程网。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试