欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 在函數(shù)上添加包裝器

 更新時間:2020年07月28日 10:31:10   作者:看云  
這篇文章主要介紹了Python 如何在函數(shù)上添加包裝器,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

問題

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

解決方案

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

import time
from functools import wraps

def 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
>>>

討論

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

@timethis
def countdown(n):
  pass

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

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

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

class A:
  @classmethod
  def method(cls):
    pass

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

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

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

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

以上就是Python 在函數(shù)上添加包裝器的詳細內容,更多關于Python 添加包裝器的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解Bagging算法的原理及Python實現(xiàn)

    詳解Bagging算法的原理及Python實現(xiàn)

    Bagging算法(Bootstrap aggregating,引導聚集算法),又稱裝袋算法,是機器學習領域的一種團體學習算法。最初由Leo Breiman于1996年提出。Bagging算法可與其他分類、回歸算法結合,提高其準確率、穩(wěn)定性的同時,通過降低結果的方差,避免過擬合的發(fā)生
    2021-06-06
  • 基于Python制作一個文件解壓縮工具

    基于Python制作一個文件解壓縮工具

    經常由于各種壓縮格式的不一樣用到文件的解壓縮時就需要下載不同的解壓縮工具去處理不同的文件。本文將用Python制作一個解壓縮小工具,以后再也不用下載各種格式的解壓縮軟件了
    2022-05-05
  • OpenCV圖像處理之自定義濾波

    OpenCV圖像處理之自定義濾波

    濾波處理分為兩大類:線性濾波和非線性濾波,OpenCV里有這些濾波的函數(shù),使用起來非常方便,這篇文章主要給大家介紹了關于OpenCV圖像處理之自定義濾波的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • Python語音合成之第三方庫gTTs/pyttsx3/speech橫評(內附使用方法)

    Python語音合成之第三方庫gTTs/pyttsx3/speech橫評(內附使用方法)

    Python是一種非常強大的腳本語言,可以用來實現(xiàn)各種復雜的應用,其中之一就是文本轉語音,即把文字轉換成聲音來發(fā)出,下面這篇文章主要給大家介紹了關于Python語音合成之第三方庫gTTs/pyttsx3/speech橫評的相關資料,文中還介紹了詳細的使用方法,需要的朋友可以參考下
    2023-05-05
  • Python 使用 Pillow 模塊給圖片添加文字水印的方法

    Python 使用 Pillow 模塊給圖片添加文字水印的方法

    這篇文章主要介紹了Python 使用 Pillow 模塊給圖片添加文字水印的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 利用Python編寫本地音樂播放器

    利用Python編寫本地音樂播放器

    這篇文章主要介紹了利用Python編寫本地音樂播放器,主要以分享完整源碼展開文章內容,具有一的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • python判斷變量是否為int、字符串、列表、元組、字典的方法詳解

    python判斷變量是否為int、字符串、列表、元組、字典的方法詳解

    這篇文章主要介紹了python判斷變量是否為int、字符串、列表、元組、字典的方法詳解,需要的朋友可以參考下
    2020-02-02
  • 如何利用python實現(xiàn)圖片轉化字符畫

    如何利用python實現(xiàn)圖片轉化字符畫

    這篇文章主要介紹了如何利用python實現(xiàn)圖片轉化字符畫,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Python中常用的內置方法

    Python中常用的內置方法

    今天小編就為大家分享一篇關于Python中常用的內置方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 實例Python處理XML文件的方法

    實例Python處理XML文件的方法

    這篇文章主要介紹了實例Python處理XML文件的方法,包括用Python處理XML大文件的情況,需要的朋友可以參考下
    2015-08-08

最新評論