python3 開發面試題(裝飾器必須考)6.4
阿新 • • 發佈:2018-06-04
args 返回 event aps 面試題 wrap spl def pen
def f(): print("2018-06-04") # 每次調用f的時候 在打印"2018-06-04" 之前打印一句 開始, 之後再打印一句 結束
def wrapper(func): def inner(): print("start") func() print("end") return inner @wrapper def f(): print("2018-06-04")答案
但這裏面還是有缺陷的,原函數如果有功能註釋的話,經過裝飾器裝飾的函數,就看不到原函數的註釋,所以我們可以優化一下
from functools import wraps #優化裝飾器的模塊 def wrapper(func): @wraps(func) #在這裏裝飾 def inner(*args, **kwargs): #有參數的情況 print("start") ret = func(*args, **kwargs) print("end") return ret #有返回值的情況下 return inner @wrapperdef f(*args, **kwargs): #有參數的情況下 """ 這是一個測試裝飾器的函數,沒什麽其他的用法 :param args: :param kwargs: :return: """ print("2018-06-04") f() # inner() print(f.__doc__) print(f.__name__) ‘‘‘ start 2018-06-04 end 這是一個測試裝飾器的函數,沒什麽其他的用法 :param args: :param kwargs: :return: f‘‘‘
python3 開發面試題(裝飾器必須考)6.4