day07-裝飾器decorator


from ast import arg
import time
from turtle import st
from typing import Any


def caltime(func):
    def fun_in(*args,**kwargs):
        st = time.time()
        func(args,kwargs)
        et = time.time()
        print("消耗的時(shí)間是{0}".format(et-st))
    return fun_in

# printnum = caltime(printnum)
# 如果寫一個(gè)通用版本,裝飾器內(nèi)部函數(shù)參數(shù)最好用(*args,**kwargs),
@caltime 
def printnum(*args,**kwargs):
    print(args,kwargs)
 

def fun_out1(func):
    def func_in1(*args,**kwargs):
        print(1)
        func(*args,**kwargs)
    return func_in1


def fun_out2(func):
    def func_in2(*args,**kwargs):
        print(2)
        func(*args,**kwargs)
    return func_in2


@fun_out1
@fun_out2
def test():
    print("test")


#!帶有裝飾器參數(shù)的需要再最外層再嵌套一層
#例如網(wǎng)絡(luò)請(qǐng)求的裝飾器
def net_param(method:str,query:str=None):
    def func_out(func):
        def func_in(*args,**kwargs):
            print("正在進(jìn)行{0}網(wǎng)絡(luò)請(qǐng)求".format(method,))
            if args or kwargs:
                print(args,kwargs)
            func()
        return func_in
    return func_out


@net_param(method="Get")
def r_request():
    print("網(wǎng)絡(luò)1回調(diào)結(jié)果")
    

@net_param(method="Post")
def r_request2():
    print("網(wǎng)絡(luò)2回調(diào)結(jié)果")
    
    
def a()->str:
    return "12"    

#? 類裝飾器
class Func:
    def __init__(self,func):
        self.func = func
    def __call__(self, *args: Any, **kwds: Any):
        #類似于func_in作用
        print("開始前驗(yàn)證")
        self.func()

@Func
def cal():
    print("進(jìn)行工作")


if __name__ == "__main__":
    # test() 
    # 說明 執(zhí)行的時(shí)候是離著函數(shù)越近的裝飾器越先執(zhí)行
    # test
    # 2
    # 1
    # r_request()
    # r_request2()
    """
    正在進(jìn)行Get網(wǎng)絡(luò)請(qǐng)求
    正在進(jìn)行Post網(wǎng)絡(luò)請(qǐng)求
    網(wǎng)絡(luò)1回調(diào)結(jié)果
    網(wǎng)絡(luò)2回調(diào)結(jié)果
    """        
    cal()
    """
    開始前驗(yàn)證
    進(jìn)行工作
    """    
 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容