国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

如何實現一個python函數裝飾器(Decorator)

瀏覽:10日期:2022-07-08 15:55:55

裝飾器本質上是一個 Python 函數或類,它可以讓其他函數或類在不需要做任何代碼修改的前提下增加額外功能,裝飾器的返回值也是一個函數/類對象。它經常用于為已有函數/類添加記錄日志、計時統計、性能測試等。

首先定義一個倒計時函數,這個函數的功能非常簡單,就是把n從當前值減少到0。

def countdown(n): while n > 0: print(’time’ + str(n)) n -= 1print(countdown.__name__)

程序輸出:

countdown

1.為函數增加一個日志裝飾器

假設現在要增強countdown的功能,在函數調用前后自動打印日志,又不想修改函數自身的功能。這種在代碼運行期間動態增加功能的方式,稱之為裝飾器(Decorator)。

能打印日志的decorator,可以定義如下:

def log(func): def wrapper(*args, **kw): print(’call %s().’ % func.__name__) return func(*args, **kw) return wrapper

然后我們借助Python的@語法,把decorator置于函數的定義處:

@logdef countdown(n): while n > 0: print(’time:’ + str(n)) n -= 1countdown(10)

程序輸出:

call countdown().time:10time:9time:8time:7time:6time:5time:4time:3time:2time:1

但此時我們再打印函數的name:

print(countdown.__name__)

程序輸出:

wrapper

我們發現函數的元數據信息變了,這顯然不是我們想要的結果。

2. 在裝飾器中拷貝元數據

為了把函數的元數據信息都保留下來,我們可以直接使用Python提供的functools庫中的@wraps裝飾器。

from functools import wrapsdef log(func): @wraps(func) def wrapper(*args, **kw): print(’call %s().’ % func.__name__) return func(*args, **kw) return wrapper@logdef countdown(n): while n > 0: print(’time:’ + str(n)) n -= 1print(countdown.__name__)

程序輸出:

countdown

3.為函數增加一個計時裝飾器

添加函數裝飾器的方法已經講清楚了,現在再實現一個完整的函數計時耗時裝飾器。

import timefrom functools import wrapsdef TimeCost(func): @wraps(func) def wrapper(*arg, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(func.__name__, end - start) return result return wrapper@TimeCostdef countdown(n): while n > 0: print(’time:’ + str(n)) n -= 1countdown(10000)

函數輸出:

(’countdown’, 0.0004801750183105469)

參考資料:

https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584

Python Cookbook中文版

以上就是如何實現一個python函數裝飾器(Decorator)的詳細內容,更多關于python函數裝飾器的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产成人在线视频 | 日韩特黄特色大片免费视频 | 国产午夜精品免费一二区 | 91精品国产高清久久久久久io | 亚洲欧美日韩成人一区在线 | 一级片爱爱| 三级网站在线免费观看 | 亚洲a级在线观看 | 在线观看精品视频 | 性视频福利在线看 | 香蕉久久一区二区不卡无毒影院 | 一本色道久久爱88av | 欧美一级一极性活片免费观看 | 日韩一级生活片 | 全免费a级毛片免费看 | 国产精彩视频在线观看 | 深夜福利国产 | 国产在线免 | 国产精品亚洲专区在线播放 | 日本乱理伦片在线观看网址 | 日本在线看小视频网址 | 免费一级特黄 | 真人毛片视频 | 亚洲精品美女在线观看 | 97精品久久久久中文字幕 | avtt天堂网永久资源手机版 | 久久精品国产免费中文 | 欧美日韩精品免费一区二区三区 | 在线播放高清国语自产拍免费 | 九九视频在线观看6 | 波多野结衣福利视频 | 国产精品久久久久毛片 | 视频一区在线播放 | 成人观看的视频三级 | 欧美片能看的一级毛片 | hd欧美xxx欧美极品hd | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 免费福利入口在线观看 | 97在线视频免费观看费观看 | 一级一片一a一片 | 男人操美女网站 |