装饰器可以让其他函数在不需要做任何代码变动的前提下增加额外功能,它的返回值也是一个函数对象。
实质: 是一个函数
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(也非函数调用)
作用:为已经存在的对象添加额外的功能
特点:不需要对对象做任何的代码上的变动
譬如,一个简单的装饰器:
def decorator(func):
def wrapper():
print 'this is function: {}'.format(func.__name__)
return func()
return wrapper
@decoration
def say_hello():
print 'hello!'
在这个装饰器中,被装饰函数不需要带任何参数。如果被装饰的函数需要传入参数,则可使用可变参数(args)和关键字参数(kwargs),有了这两个参数,装饰器就可以用于任意目标函数了。
一个计时的装饰器:
import time
def time_consuming(func):
def wrapper(*args, **kwargs):
t0 = time.time()
back = func(*args, **kwargs)
return back, time.time() - t0
return wrapper
@time_consuming
def say_hello():
print 'hello!'
网友评论