场景时这样的,我有个一大堆任务,我要给这些
任务计时
,入库。就需要一个带有参数的装饰器来记录任务
名称, 在任务执行前和执行之后都需要记录任务当时执行的时刻。
#-*- encoding=utf-8 -*-
from functools import wraps
def task_logging(taskname):
def func_wrapper(func):
@wraps(func)
def return_wrapper(*args, **wkargs):
# 函数通过装饰起参数给装饰器传送参数
print ‘before task‘,taskname
# 装饰器传变量给函数
taskid = 1
summer, funcres = func(taskid, *args, **wkargs)
print ‘after task‘, taskid, summer
return funcres
return return_wrapper
return func_wrapper
@task_logging("test")
def testd(taskid):
print "testd runing",taskid
return "task summer success eg", []
print testd()
执行的结果
liuzhizhi@lzz-rmbp|snmp # python decorators_1.py
before task test
testd runing 1
after task 1 task summer success eg
[]
把中间的print 替换成需要执行的动作就可以完成,响应的功能了,参数在装饰器
和被装饰函数
之间可以很好的传递。
原文地址:http://blog.csdn.net/orangleliu/article/details/45843813