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>}
    人生就是要不断折腾
  • 相关阅读:
    免费下载小说
    前段博客云库网
    node发送邮件
    node 发送短信
    node生成uuid
    node 控制台颜色
    OfficeCommandbarDesigner20170202.rar
    OfficeCommandbarViewer20171005.rar
    VB.Net 正则表达式测试器
    Windows_Management_Instrumentation
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11672945.html
Copyright © 2011-2022 走看看