看廖雪峯官網的python3裝飾器有感 裝飾器即將一個函數作爲變量在新的函數中調用此函數。 作業: 能否寫出一個@log的decorator,使它既支持: @logdef f(): pass 又支持: @log('execute')def f(): pass 例1: import functools import time def log(*args,**kwargs): # *args 是個元組 if args and isinstance(args,tuple): #log() def decorator(func): @functools.wraps(func) def wrapper(*args1,**kwargs1): print("1111 %s %s()" %(args[0],func.__name__)) #return func return func(*args1,**kwargs1) return wrapper return decorator else: def decorator(func): @functools.wraps(func) def wrapper(*args1,**kwargs1): print("222 %s()" % func.__name__) return func(*args1,**kwargs1) return wrapper return decorator @log('test') def now1(): print(time.time()) now1() @log() def now2(): print(time.time()) now2()
result:得到兩個函數調用log裝飾器的結果。
1111 test now1()
1505878800.4148097
222 now2()
1505878800.4148097
網站鏈接:廖雪峯python3裝飾器