python之decorator 装饰器
1. 装饰器的概念(decorator)
动态扩展已定义函数的功能,但是不改动函数本身的代码。
原理:高阶函数可以接受函数作为参数,并返回一个函数。
所以将需要扩展的函数作为参数传入,生成新的函数返回。
调用装饰器,运用@。
2. 无参装饰器(有两层函数)
比如定义了装饰器log
def log(f): //第一层 : 传入函数
def fn(*args, **kw)://第二层 :实现装饰器
print 'this is a log' //装饰器扩展内容
return f(*args, **kw) //调用传入的函数
return fn //返回装饰器函数
对于装饰器log的调用
@log
def add(x, y):
return x + y
print add(1, 2)
结果为 :
this is a log
3
运行时直接调用装饰器log的fn函数,将add函数作为f传入。
3. 带参装饰器(有三层函数,多加一层传入参数的函数)
def log_with_param(text): //传参
def log_decorator(f): //传函数
def fn(*args, **kw): //实现装饰器
print '%s'%(text) //应用传入的参数
return f(*args, **kw) //调用传入的函数
return fn
return log_dercorator
应用:
@log_with_param('test')
def add(x, y):
return x + y
print add(1, 2)
输出结果为:
test
3

浙公网安备 33010602011771号