色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

Python 在函數上添加包裝器

瀏覽:64日期:2022-07-16 10:02:55

問題

你想在函數上添加一個包裝器,增加額外的操作處理(比如日志、計時等)。

解決方案

如果你想使用額外的代碼包裝一個函數,可以定義一個裝飾器函數,例如:

import timefrom functools import wrapsdef timethis(func): ’’’ Decorator that reports the execution time. ’’’ @wraps(func) def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(func.__name__, end-start) return result return wrapper

下面是使用裝飾器的例子:

>>> @timethis... def countdown(n):... ’’’... Counts down... ’’’... while n > 0:... n -= 1...>>> countdown(100000)countdown 0.008917808532714844>>> countdown(10000000)countdown 0.87188299392912>>>

討論

一個裝飾器就是一個函數,它接受一個函數作為參數并返回一個新的函數。當你像下面這樣寫:

@timethisdef countdown(n): pass

跟像下面這樣寫其實效果是一樣的:

def countdown(n): passcountdown = timethis(countdown)

順便說一下,內置的裝飾器比如 @staticmethod, @classmethod,@property 原理也是一樣的。例如,下面這兩個代碼片段是等價的:

class A: @classmethod def method(cls): passclass B: # Equivalent definition of a class method def method(cls): pass method = classmethod(method)

在上面的 wrapper() 函數中,裝飾器內部定義了一個使用 *args 和 **kwargs 來接受任意參數的函數。在這個函數里面調用了原始函數并將其結果返回,不過你還可以添加其他額外的代碼(比如計時)。然后這個新的函數包裝器被作為結果返回來代替原始函數。

需要強調的是裝飾器并不會修改原始函數的參數簽名以及返回值。使用 *args 和 **kwargs 目的就是確保任何參數都能適用。而返回結果值基本都是調用原始函數 func(*args, **kwargs) 的返回結果,其中func就是原始函數。

剛開始學習裝飾器的時候,會使用一些簡單的例子來說明,比如上面演示的這個。不過實際場景使用時,還是有一些細節問題要注意的。比如上面使用 @wraps(func) 注解是很重要的,它能保留原始函數的元數據(下一小節會講到),新手經常會忽略這個細節。接下來的幾個小節我們會更加深入的講解裝飾器函數的細節問題,如果你想構造你自己的裝飾器函數,需要認真看一下。

以上就是Python 在函數上添加包裝器的詳細內容,更多關于Python 添加包裝器的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 久久久久久亚洲精品中文字幕 | 黄色日韩网站 | 国产精品日本一区二区不卡视频 | 国产精品黄在线观看免费 | 污美女网站www在线观看 | 国产欧美日韩免费一区二区 | 久久爱青青草 | 在线观看中文字幕亚洲 | 成人午夜免费观看 | 中文国产成人精品久久水 | fc2在线播放 | 亚洲丝袜另类 | 国产成人精品视频在放 | 精品一区二区三区视频在线观看免 | 国产片在线观看狂喷潮bt天堂 | 久久高清影院 | 久久精品国产一区二区三区日韩 | 日韩一区国产二区欧美三 | 狠狠色丁香婷婷久久综合考虑 | 亚洲日本aⅴ片在线观看香蕉 | 婷婷的久久五月综合先锋影音 | 欧美成人午夜视频免看 | 欧美自拍视频 | 成年免费大片黄在线观看一 | 福利网址在线 | 亚洲精品综合一区二区 | 男女毛片免费视频看 | 国产欧美一区二区三区观看 | 性欧洲精品videos' | 亚洲黄色性视频 | 久草视频在线资源站 | 一级女性生活片 | 欧美性巨大欧美 | 全部免费的毛片在线看美国 | 久久观看 | 久久久综合久久 | 一级在线观看视频 | 国产精品毛片在线大全 | 国产三级国产精品国产国在线观看 | 黄网在线观看免费 | 久久久久久久久久久观看 |