deflog(func):defwrapper(*args,**kwargs):print('%s function start'% func.__name__) result =func(*args, **kwargs)print('%s function end'% func.__name__)return resultreturn wrapper@logdefsay1(words):print(words)@logdefsay2(words):return wordssay1('hello')# 此时say1和say2指向的是wrapper函数(__name__为'wrapper')data =say2('hello')print(data)# 均打印:# say function start# hello# say function end
import functoolsdeflog(func):@functools.wraps(func)defwrapper(*args,**kwargs):print('%s function was called.'% func.__name__)returnfunc(*args, **kwargs)return wrapper
classlog(object):def__init__(self,level): self._level = leveldef__call__(self,func):print('__call__()方法执行')defdecorator(*args,**kwargs):if self._level =='warning':print('warning! function was called')elif self._level =='error':print('error! function was called')returnfunc(*args, **kwargs)return decorator@log('error')defsay(words):return wordsres =say('hello')print(res)res =say('world')print(res)# 打印:# __call__()方法执行# error! function was called# hello# error! function was called# world