裝飾器

# 裝飾器造成的過程 : 最簡單的裝飾器 有返回值的 有一個參數 萬能參數
# 裝飾器的做用
# 原則 :開放封閉原則
# 語法糖 :@
# 裝飾器的固定模式

import time
# # print(time.time()) # 獲取當前時間
# # time.sleep(10)  #讓程序在執行到這個位置的時候停一下子

# def timmer(f):    #裝飾器函數
#     def inner():
#         start = time.time()
#         ret = f()       #被裝飾的函數
#         end = time.time()
#         print(end - start)
#         return ret
#     return inner
#
# @timmer         #語法糖 @裝飾器函數名  #與func = timmer(func)功能相同
# def func():     #被裝飾的函數
#     time.sleep(0.01)
#     print('老闆好同事好你們好')
#     return '新年好'
# # func = timmer(func)
# ret = func()   #inner()
# print(ret)

 

 

# 裝飾器的做用 —— 不想修改函數的調用方式 可是還想在原來的函數先後添加功能
# timmer 就是一個裝飾器函數,只是對一個函數 有一些裝飾做用

# 原則: 開放封閉原則
# 開放 : 對擴展是開放的
# 封閉 : 對修改是封閉的
# 封版

裝飾器造成過程
#裝飾帶參數函數的裝飾器
# def timmer(f):    #裝飾器函數
#     def inner(*args,**kwargs):    #爲應對傳參個數和方式不肯定的狀況
#         #(1,2) /(1)
#         start = time.time()
#         ret = f(*args,**kwargs)  #f(1,2)       #被裝飾的函數
#         end = time.time()
#         print(end - start)
#         return ret
#     return inner
# 有兩個參數的狀況
# @timmer         #語法糖 @裝飾器函數名
# def func(a,b):     #被裝飾的函數
#     time.sleep(0.01)
#     print('老闆好同事好你們好',a,b)
#     return '新年好'
# 有一個參數的狀況
# @timmer         #語法糖 @裝飾器函數名
# def func1(a):     #被裝飾的函數
#     time.sleep(0.01)
#     print('老闆好同事好你們好',a)
#     return '新年好'

# # func = timmer(func)
# ret = func(1,2)   #inner()

# ret = func(1,b = 2)   #inner()  #實參裏有關鍵字傳參時
# print(ret)

 

裝飾器固定格式app

# def wrapper(f):    #裝飾器函數,f是被裝飾的函數
#     def inner(*args,**kwargs):
#         '''在被裝飾函數以前要作的事'''
#         ret = f(*args,**kwargs)    #被裝飾的函數
#         '''在被裝飾函數以後要作的事'''
#         return ret
#     return inner

 

示例函數

# def wrapper(f):    #裝飾器函數,f是被裝飾的函數
#     def inner(*args,**kwargs):
#         '''在被裝飾函數以前要作的事'''
#         ret = f(*args,**kwargs)    #被裝飾的函數
#         '''在被裝飾函數以後要作的事'''
#         return ret
#     return inner
#
# @wrapper         #語法糖 @裝飾器函數名
# def func(a,b):     #被裝飾的函數
#     time.sleep(0.01)
#     print('老闆好同事好你們好',a,b)
#     return '新年好'

 

def wrapper(func):   #qqxing
    def inner(*args,**kwargs):
        ret = func(*args,**kwargs)   #被裝飾的函數
        return ret
    return inner

@wrapper        #qqxing = wrapper(qqxing)
def qqxing():
    print(123)

ret = qqxing()   #inner()

 

 

 完美的裝飾器spa

# from functools import wraps
# def wrapper(f):    #裝飾器函數,f是被裝飾的函數
#     @wraps(f)
#     def inner(*args,**kwargs):
#         '''在被裝飾函數以前要作的事'''
#         ret = f(*args,**kwargs)    #被裝飾的函數
#         '''在被裝飾函數以後要作的事'''
#         return ret
#     return inner
相關文章
相關標籤/搜索