【Python】decorator

【Python】decorator

编写decorator:

首先编写decorator函数,以@log为例:

def log(f):
    def fn(x):
        print 'call ' + f.__name__ + '()...'
        return f(x)
    return fn

在这里,log函数中定义了一个fn函数,fn中打印了log并返回f,log函数返回fn。注意,这里的f.__name__是调用了函数的名字

调用的时候:

@log
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)

这里的@log与 factorial=log(factorial)等效,意味着,原有的factorial被覆盖掉了。

结果:

call factorial()...
3628800

要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用:

def log(f):
    def fn(*args, **kw):
        print 'call ' + f.__name__ + '()...'
        return f(*args, **kw)
    return fn

这样不管f中的参数是什么样子的,都可以这样调用了。

相关文章:

  • 2021-11-16
  • 2021-12-26
  • 2021-07-14
  • 2022-12-23
  • 2021-07-14
  • 2021-05-18
  • 2022-03-05
  • 2022-01-13
猜你喜欢
  • 2021-06-15
  • 2022-02-09
  • 2022-12-23
  • 2022-02-18
相关资源
相似解决方案