python带参数的装饰器怎么写?

美女程序员鼓励师

1、装饰器说明

装饰器看上去并没有任何参数(使用 @ 时被装饰的方法作为隐式参数传递给装饰器)。但是,有时候让装饰器自带一些参数,可以提供更灵活的应用。

2、实例

我们改写 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学习网。

以上是 python带参数的装饰器怎么写? 的全部内容, 来源链接: utcz.com/z/543399.html

回到顶部