关键在于判断传入的参数是字符串还是函数?
# !/usr/bin/env python3 # -*- coding: utf-8 -*- ''' 请再思考一下能否写出一个@log的decorator,使它既支持: @log def f(): pass 又支持: @log('execute') def f(): pass ''' import functools def log(both): if not isinstance(both, str): #判断传入的参数是字符串还是函数 @functools.wraps(both) def log1(*arg, **kw): print('call %s():' % both.__name__) return both(*arg, **kw) return log1 else: def log2(fn): @functools.wraps(fn) def wrapper(*arg, **kw): print('%s %s():' % (both, fn.__name__)) return fn(*arg, **kw) return wrapper return log2 @log def now1(): print('2019-6-13') now1() @log('execute') def now2(): print('2019-6-13') now2()
大写的尴尬,这是上一节的,发错了。。。。
Sign in to make a reply
用户7034793165
关键在于判断传入的参数是字符串还是函数?