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)行工作
"""
day07-裝飾器decorator
?著作權(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ù)。
【社區(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)容
- 裝飾者模式 在提及這個(gè)新特性前我們先了解一下設(shè)計(jì)模式中的裝飾者模式。 定義 裝飾者模式能夠在不改變對(duì)象自身的基礎(chǔ)上...
- 許多面向?qū)ο蟮恼Z(yǔ)言都有 裝飾器(Decorator) 函數(shù),用來(lái)修改類的行為。目前,這個(gè)方法已經(jīng)被引入了 ES7,...
- 裝飾器模式-Decorator(Java實(shí)現(xiàn)) 裝飾器模式允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能, 同時(shí)又不改變其結(jié)構(gòu)。...
- 什么時(shí)候用裝飾器想要給函數(shù)動(dòng)態(tài)的增加一些額外的功能。Python裝飾器(decorator)在實(shí)現(xiàn)的時(shí)候,被裝飾后...
- python的高級(jí)技巧中,一定有裝飾器的一席之地。目前掌握的知識(shí)還不是很多,我盡量用自己能理解的語(yǔ)言描述清楚。 什...