1. 程式人生 > >Python進階【第九篇】裝飾器

Python進階【第九篇】裝飾器

turn spa none app light fun rap log python

什麽是裝飾器

裝飾器本身就是函數,並且為其他函數添加附加功能

裝飾器的原則:1.不修改被裝飾對象的源代碼 2.不修改被裝飾對象的調用方式
裝飾器=高階函數+函數嵌套+閉包

技術分享圖片

# res=timmer(test) #返回的是wrapper的地址 # res() #執行的是wrapper()

# test=timmer(test) #返回的是wrapper的地址 # test() #執行的是wrapper()

# @timmer 就相當於 test=timmer(test)

# #搭一個高階函數與函數嵌套的框架
# def timmer(func):
#     def wrapper():
#         print(func)
#         func()
#     return wrapper
import time
def timmer(func):
    def wrapper():
        start_time=time.time()
        # print(func)
        res=func()#由於執行新獲得的test,所以執行wrapper,func作為局部變量,當前沒有,便往上一層去找,即test,運行test
        stop_time = time.time()
        print(‘運行時間是%s‘ %(stop_time -start_time))
        #wrapper裏沒有返回值,所以不管怎麽改變test,返回值都是none
        return res#由於func運行的就是test,所以將func的值賦給res,再返回res就是test的返回值
    return wrapper
@timmer#相當於test = timmer(test)#把test函數作為參數傳給timmer,執行timmer獲取到返回值wrapper,並將其賦給test
def test():
    time.sleep(3)
    print(‘test運行完畢‘)
    return ‘這是test的返回值‘


test()#執行新的test,實際就是執行wrapper,這是為了不改變test的調用方式

Python進階【第九篇】裝飾器