编写自定义装饰器有许多方法,但最简单和最容易理解的方法是编写一个函
数,返回封装原始函数调用的一个子函数。
>>> def mydecorator(function):
... def _mydecorator(*args, **kw):
... res = function(*args, **kw)
... return res
... return _mydecorator
...
为子函数应用一个诸如_mydecorator之类的明确的名称,而不是wrapper这样
的通用名称是一个好习惯,因为明确的名称更方便在错误发生的时候回溯--可
以知道正在处理指定的装饰器。
当装饰器需要参数是,必须使用第二级封装
>>> def mydecorator(arg1, arg2):
... def _mydecorator(function):
... def __mydecorator(*args, **kw):
... res = function(*args, **kw)
... return res
... return __mydecorator
... return _mydecorator
...