# 因为wrap函数的参数只能是一个函数 # 而wrapper的参数又只能是传递给函数的参数列表 # 如果想要再次处理被装饰函数的返回结果,只能在最外层的函数参数中指定 # 这里就是在deco函数的参数中 # 如果只用两层嵌套就无法做到 def deco(render=None): def wrap(func): def wrapper(*args,**kwargs): result = func(*args,**kwargs) ### return render(result) ### return wrapper return wrap my_render = lambda x: str(x) + ' --my_render' @deco(render=my_render) def test(): return "this is test!" print test()
这里正是因为想让result被再次处理,所以要在最外层函数的参数中制定调用的处理函数,就是my_render。