当前位置 博文首页 > Python装饰器的应用场景及实例用法

    Python装饰器的应用场景及实例用法

    作者:小妮浅浅 时间:2021-07-03 18:33

    1、说明

    装饰本质上是一个Python函数,它能使其他函数在没有任何代码变化的情况下增加额外的功能。有了装饰,我们可以抽出大量与函数功能无关的相同代码,继续重用。

    2、应用场景

    包括插入日志、性能测试、事务处理、缓存和权限验证。

    3、实例

    # 装饰器
    # func指函数
    def decorator(func):
        def wrapper(*args, **kwargs):
            # 执行函数内部逻辑 打印时间
            print(time.time(), args, kwargs)
            # 执行调用函数中逻辑 打印不同参数
            func(*args, **kwargs)
        return wrapper
    # 一个参数
    @decorator
    def function(param):
        print('function : this is decorator ' + param)
    # 两个参数
    @decorator
    def function1(param1, param2):
        print('function1 : this is decorator ' + param1)
        print('function1 : this is decorator ' + param2)
    # 三个参数(可变参数)
    @decorator
    def function2(param1, param2, **kwargs):
        print('function2 : this is decorator ' + param1)
        print('function2 : this is decorator ' + param2)
        print(kwargs)
    function('param')
    function1('param1' , 'param2')
    function2('param1' , 'param2', x=1,y=2,z=3)

    内容扩展:

    函数注册表

    简单注册表

    funcs = []
    def register(func):
      funcs.append(func)
      return func    
    @register
    def a():
      return 3
      
    @register
    def b():
      return 5  
    # 访问结果
    result = [func() for func in funcs]

    注册表隔离(使用类的不同实例)

    class Registry(object):
      def __init__(self):
        self._funcs = []
      
      def register(self, func):
        self._funcs.append(func)
        
      def run_all(self):
        return [func() for func in self._funcs] 
    r1 = Registry()
    r2 = Registry()
    
    @r1.register
    def a():
      return 3
      
    @r2.register
    def b():
      return 5
      
    @r1.register
    @r2.register
    jsjbwy
    下一篇:没有了