标签:
Python中的装饰器
假定现有如下需求:
def f1(x):
return x*2
print f1(5)
那么,现在想加入一个打印日志的方法,打印出调用的是哪个方法的方法。一般做法是这样:
def f1(x):
print ‘call f1()‘
return x*2
print f1(5)
那有没有更简单明了的方法呢,我上篇博文中有写的高阶函数,那么我们想到高阶函数是可以把函数当参数并且可以返回函数的。那么,再次,那么,是不是可以接收一个函数,对其进行一定包装(比如此处加一个打印日志的功能),然后返回一个新函数呢?自然可以,请看:
def new_fn(f):
def fn(x):
print ‘call‘+ f.__name__+‘() by decorator‘
return f(x)
return fn
f1=new_fn(f1)
print f1(5)
def new_fn(f):
def fn(x):
print ‘call‘ +f.__name__+‘() using @‘
return f(x)
return fn
@new_fn#这里也就是相当于上面的f1=new_fn(f1)弄成了这个样子,写习惯了就好了。
def f1(x):
return x*2
print f1(5)
标签:
原文地址:http://www.cnblogs.com/anmutu/p/4827807.html