1. 程式人生 > >python3 開發面試題(裝飾器必須考)6.4

python3 開發面試題(裝飾器必須考)6.4

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

@wrapper
def 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