• 技术文章 >Python技术 >Python基础教程

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

    小妮浅浅小妮浅浅2021-02-22 17:01:09原创1655

    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 装饰器
    品易云
    上一篇:python使用互斥锁处理资源分配 下一篇:python中如何获取当前文件的部分信息?

    相关文章推荐

    • python中包初始化有什么好处?• python绝对和相对导入的介绍• python如何将相对路径转换为绝对路径?• python检测给定的路径是否存在的方法• python使用互斥锁处理资源分配

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网