日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

对装饰器@wraps的解释(一看就懂)-- 并对装饰器详解

發(fā)布時間:2023/11/28 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对装饰器@wraps的解释(一看就懂)-- 并对装饰器详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 先看一段代碼


def is_login(func):def foo(*args,**kwargs):return func(*args,**kwargs)return foodef test():print('我是:',test.__name__)@is_login
def test1():print('我是:',test1.__name__)
@is_login
def test2():print('我是:',test2.__name__)test()
test1()
test2()>>>>我是: test
我是: foo
我是: foo

可以發(fā)現函數的函數名即 name已被裝飾器改變

2.那我們來增加@wraps


from functools import wrapsdef is_login(func):@wraps(func)def foo(*args,**kwargs):return func(*args,**kwargs)return foodef test():print('我是:',test.__name__)@is_login
def test1():print('我是:',test1.__name__)
@is_login
def test2():print('我是:',test2.__name__)test()
test1()
test2()>>>>
我是: test
我是: test1
我是: test2

結論:

可以看見@wraps可以保證裝飾器修飾的函數的name的值保持不變


補充:裝飾的優(yōu)化

以時間裝飾器為例,進行優(yōu)化

  • 裝飾器的統(tǒng)一模板

from functools import wraps
# 對函數的裝飾器, 對類func最好為cls
def decorate(func):@wraps(func)# 增添或修改功能的函數def wrapper(*args,**kwargs):# 執(zhí)行被裝飾的函數result = func(*args,**kwargs) # 返回結果return result# 返回內層函數return wrapper

普通--時間裝飾器


from functools import wraps
import time
from random import randintdef use_time(func):@wraps(func)def wrapper(*args,**kwargs):st_time = time.time()result = func(*args,**kwargs)end_time = time.time()print(f'{func.__name__}函數use_time:{end_time-st_time}s')return wrapper@use_time
def foo():time.sleep(randint(1,3))for _ in range(3):foo()#輸出
>>>>
foo函數use_time:1.0007495880126953s
foo函數use_time:3.0018675327301025s
foo函數use_time:3.0030477046966553s

下面對改裝飾器進行優(yōu)化(解耦)

  • 可以發(fā)先上面時間裝飾器計算的結果,只能在控制臺上打印
  • 那我們怎樣才能將它輸出為日志呢???
  • 我們需要將他的結果進行自定輸出

# 在增加一層函數
from functools import wraps
import time
from random import randintdef record(output):def use_time(func):@wraps(func)def wrapper(*args,**kwargs):st_time = time.time()result = func(*args,**kwargs)end_time = time.time()
#             print(f'{func.__name__}函數use_time:{end_time-st_time}s')output(func.__name__, end_time-st_time)return wrapperreturn use_time# 改裝飾器的結果就可以自定義了,下面以print函數為例
@record(print)
def foo():time.sleep(randint(2,5))for _ in range(3):foo()
>>>>
foo 3.000645875930786
foo 4.003818988800049
foo 2.0020666122436523

結果輸出日志

  • 只需要自己定義一個函數

def write_log(name,content):with open('./time.log','a')as f:f.write(f'{name}耗時:{content}\r\n') # \r\n 換行# 只需要將裝飾器改為@record(write_log)
@record(write_log)
def foo():time.sleep(randint(2,5))for _ in range(3):foo()

效果如下

效果如圖

作者:憧憬001
鏈接:https://www.jianshu.com/p/5df1769e562e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯(lián)系作者獲得授權并注明出處。

總結

以上是生活随笔為你收集整理的对装饰器@wraps的解释(一看就懂)-- 并对装饰器详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久亚洲av无码专区桃色 | 曰韩一级片| 国产精品99精品无码视 | 亚洲热av| 一区二区三区视频观看 | 国产国语对白 | 97avcc | 日日夜夜网站 | 中文字幕成人动漫 | 国产亚洲片 | 九九热精品视频在线观看 | 成人性生交视频免费观看 | 国产日韩欧美成人 | 熟睡侵犯の奶水授乳在线 | 狂野少女电影在线观看国语版免费 | 成人午夜电影网站 | 精品人妻一区二区免费 | 理论片国产 | 中文字幕超碰在线 | 老汉色老汉首页av亚洲 | 91成人在线观看喷潮蘑菇 | 亚洲淫欲 | 日韩黄色片 | 国产一级片自拍 | 操操操操操操操操操 | 91麻豆成人精品国产免费网站 | 国产做爰免费视频观看 | 欧美日韩电影一区二区三区 | 日本护士体内she精2xxx | 国产又大又黄又粗 | 清纯粉嫩极品夜夜嗨av | 欧美一级大片 | 香蕉久久国产 | 午夜精品三级久久久有码 | 国产成人中文字幕 | www.成人| 操人视频网站 | 黄色一级一片 | 91精品免费 | 色乱码一区二区三区在线男奴 | 在线亚洲综合 | 国产一级二级毛片 | 中文字母av| 日本二三区 | 外国黄色网址 | 草草在线视频 | 13日本xxxxxⅹxxx20 | 日韩一区二区三免费高清在线观看 | 美女丝袜av| 蜜桃久久一区二区三区 | 久久午夜福利电影 | 日本国产在线 | 久久婷婷av | 日韩在线一二三 | 国产日韩视频在线观看 | 久久精品首页 | 天天碰天天碰 | 在线免费观看一区 | 亚洲一区中文字幕在线观看 | 国产午夜福利精品 | free性娇小hd第一次 | 麻豆国产精品一区 | 亚洲精品视频一区二区 | 亚洲天堂网址 | a天堂中文字幕 | 久久福利精品 | 黄色片久久久 | 亚洲国产精品一区 | 国产精品女同一区二区 | yy4138理论片动漫理论片 | 奇米网一区二区 | 波多野吉衣av在线 | 爆操少妇 | 上原亚衣av一区二区三区 | 性一交一乱一色一视频麻豆 | 在线观看欧美成人 | 久久成年 | 国产真人无码作爱视频免费 | 四虎网址在线 | 视频一区二区三区精品 | 亚洲成熟少妇 | 天天舔夜夜操 | 18在线观看视频 | 一区二区三区黄色录像 | 操你啦在线视频 | 成人小视频免费 | 伊人222成人综合网 亚洲日本中文 | 久久色网站 | 男人天堂你懂的 | 少妇做爰k8经典 | 日本理论视频 | 中文字幕精品在线视频 | a毛片在线观看 | 成人免费视频久久 | 香蕉视频免费 | www.香蕉视频.com | 日本精品国产 | 色女孩综合 | 影音先锋中文字幕在线播放 |