• 参数化,注册装饰器



    registry = set() def register(active=True): def decorate(func): print('running register(active=%s)->decorate(%s)'% (active,func)) if active: registry.add(func) else: registry.discard(func) return func return decorate @register(active=False) def f1(): print('running f1()') @register() def f2(): print('running f2()') def f3(): print('running f3()') print(registry) print(register()(f3))#表达式返回decorate,然后应用在f3上 print(registry) # 已经把f3添加到registry print(register(active=False)(f2)) #删除f2 print(registry) #只有f3

     参数化clock装饰器

    import time
    
    DEFAULT_FMT='[{elapsed:0.8f}s] {name}({args}) -> {result}'
    def clock(fmt= DEFAULT_FMT): #参数化装饰器工厂函数
        def decorte(func):#真正的装饰器
            def clocked(*_args):#包装被装饰的函数
                t0 = time.perf_counter()
                _result = func(*_args) # 返回 被装饰函数返回的真正结果
                elapsed = time.perf_counter()- t0
                name = func.__name__
                args = ','.join(repr(arg) for arg in _args)
                result = repr(_result)
                print(fmt.format(**locals())) #**local为了在fmt中引用clocked的局部变量
                return _result
            return clocked
        return decorte
    
    if __name__ == '__main__':
        @clock()
        def snooze(seconds):
            time.sleep(seconds)
        for i in range(3):
            snooze(.123)

     传入格式参数

    if __name__ == '__main__':
        @clock('{name}:{elapsed}s')
        def snooze(seconds):
            time.sleep(seconds)
        for i in range(3):
            snooze(.123)

    if __name__ == '__main__':
        @clock('{name}({args}) dt={elapsed:0.3f}s')
        def snooze(seconds):
            time.sleep(seconds)
        for i in range(3):
            snooze(.123)

  • 相关阅读:
    键盘ASCII码
    Pandas常用功能总结
    TensorFlow之多核GPU的并行运算
    Linux中目录以及路径问题
    菜鸟的服务器进阶
    ORA-02447: cannot defer a constraint that is not deferrable
    ORA-25153: Temporary Tablespace is Empty解决方法
    查询当前会话进程号
    Oracle中的USEREVN()
    Oracle物理结构与逻辑结构
  • 原文地址:https://www.cnblogs.com/Erick-L/p/8336646.html
Copyright © 2020-2023  润新知