python 装饰器二
程序员文章站
2022-07-14 23:30:15
...
编写一个decorator,能在函数调用的前后打印出'begin call'
和'end call'
的日志。
def log(func):
def wrapper(*args, **kw):
print 'end call: %s' %func.__name__
c = func(*args, **kw)
print 'begin call: %s' %func.__name__
return c
return wrapper
@log
def now():
print '2018-06-21'
now()
调用的装饰器log中,函数wrapper里将now()函数赋值给C,相当于调用了一次now(),再加上最后的日志,而最后返回的是c,一样是now函数
能否写出一个@log
的decorator,使它既支持:
@log
def f():
pass
又支持:
@log('execute')
def f():
pass
import functools
def log(text = ''):
def decorator(func):
def wrapper(*args, **kw):
print '%s end call: %s' %(text, func.__name__)
c = func(*args, **kw)
print '%s begin call: %s' %(text, func.__name__)
return c
return wrapper
return decorator
@log()
def now():
pass
now()