zoukankan      html  css  js  c++  java
  • 参数化装饰器

    解析源码中的装饰器时,Python 把被装饰的函数作为第一个参数传给装 饰器函数。那怎么让装饰器接受其他参数呢?答案是:创建一个装饰器 工厂函数,把参数传给它,返回一个装饰器,然后再把它应用到要装饰 的函数上。不明白什么意思?当然。下面以我们见过的最简单的装饰器 为例说明:
    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()')
    >>> import registration_param
    running register(active=False)->decorate(<function f1 at 0x10063c1e0>)
    running register(active=True)->decorate(<function f2 at 0x10063c268>)
    >>> registration_param.registry
    {<function f2 at 0x10063c268>}
    人生就是要不断折腾
  • 相关阅读:
    curl crt
    test with nmap
    C#查询XML解决“需要命名空间管理器”问题
    Dapper实用教程
    javascript 计算两个日期的差值
    Glib学习笔记(二)
    安装osquery笔记
    Golang多线程简单斗地主
    PHP扩展开发之Zephir
    zabbix 安装记录
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11672945.html
Copyright © 2011-2022 走看看