python 装饰器二

xiaoxiao2025-04-16  6

 

 

编写一个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()

 

转载请注明原文地址: https://www.6miu.com/read-5028409.html

最新回复(0)