最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

問題

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

解決方案

如果你想使用額外的代碼包裝一個(gè)函數(shù),可以定義一個(gè)裝飾器函數(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
>>>

討論

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

@timethis
def countdown(n):
  pass

跟像下面這樣寫其實(shí)效果是一樣的:

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

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

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

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

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

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

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

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

相關(guān)文章

  • Python技巧分享之如何將字符串轉(zhuǎn)回DataFrame格式

    Python技巧分享之如何將字符串轉(zhuǎn)回DataFrame格式

    平常我們使用pandas,一般使用的是DataFrame和Series,但個(gè)別交換數(shù)據(jù)的時(shí)候,只能使用字符串,那如何再將字符串再轉(zhuǎn)回DataFrame格式呢,本文就來和大家講講解決辦法
    2023-06-06
  • pandas參數(shù)設(shè)置的實(shí)用小技巧

    pandas參數(shù)設(shè)置的實(shí)用小技巧

    這篇文章主要給大家介紹了關(guān)于pandas參數(shù)設(shè)置的實(shí)用小技巧,文中通過實(shí)例代碼結(jié)束的非常詳細(xì),對大家學(xué)習(xí)或者使用pandas具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 一文帶你了解Python中pymysql的使用

    一文帶你了解Python中pymysql的使用

    pymysql就是聯(lián)通mysql實(shí)現(xiàn)python窗口與mysql數(shù)據(jù)庫交互的庫,十分方便操作,這篇文章將詳細(xì)說明如何掌握并使用該庫,感興趣的可以了解一下
    2023-02-02
  • python機(jī)器學(xué)習(xí)之線性回歸詳解

    python機(jī)器學(xué)習(xí)之線性回歸詳解

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)之線性回歸詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • python GUI庫圖形界面開發(fā)之PyQt5單選按鈕控件QRadioButton詳細(xì)使用方法與實(shí)例

    python GUI庫圖形界面開發(fā)之PyQt5單選按鈕控件QRadioButton詳細(xì)使用方法與實(shí)例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5單選按鈕控件QRadioButton詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下
    2020-02-02
  • 使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例

    使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例

    這篇文章主要介紹了使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實(shí)例,本文先是講解了什么是守護(hù)進(jìn)程,然后給出了一個(gè)Python語言的簡單實(shí)現(xiàn),需要的朋友可以參考下
    2015-02-02
  • Python中的二叉樹查找算法模塊使用指南

    Python中的二叉樹查找算法模塊使用指南

    二叉樹查找算法,在開發(fā)實(shí)踐中,會(huì)經(jīng)常用到。按照慣例,對于這么一個(gè)常用的東西,Python一定會(huì)提供輪子的。是的,python就是這樣,一定會(huì)讓開發(fā)者省心,降低開發(fā)者的工作壓力。
    2014-07-07
  • python 內(nèi)置庫wsgiref的使用(WSGI基礎(chǔ)入門)

    python 內(nèi)置庫wsgiref的使用(WSGI基礎(chǔ)入門)

    WSGI(web服務(wù)器網(wǎng)關(guān)接口)主要規(guī)定了服務(wù)器端和應(yīng)用程序之間的接口,即規(guī)定了請求的URL到后臺(tái)處理函數(shù)之間的映射該如何實(shí)現(xiàn)。wsgiref是一個(gè)幫助開發(fā)者開發(fā)測試的Python內(nèi)置庫,程序員可以通過這個(gè)庫了解WSGI的基本運(yùn)行原理,但是不能把它用在生產(chǎn)環(huán)境上。
    2021-06-06
  • 使用Python中的線程進(jìn)行網(wǎng)絡(luò)編程的入門教程

    使用Python中的線程進(jìn)行網(wǎng)絡(luò)編程的入門教程

    這篇文章主要介紹了使用Python中的線程進(jìn)行網(wǎng)絡(luò)編程的入門教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python面向?qū)ο笾械姆庋b詳情

    Python面向?qū)ο笾械姆庋b詳情

    這篇文章主要介紹了Python面向?qū)ο笾械姆庋b詳情,在python中也有對對象的封裝操作,使其對外只提供固定的訪問模式,不能訪問其內(nèi)部的私有屬性和私有方法。下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03

最新評論

黔西| 大同县| 拉孜县| 灯塔市| 吐鲁番市| 永昌县| 洞头县| 韶山市| 上犹县| 南通市| 康保县| 乌兰浩特市| 郁南县| 鸡西市| 固阳县| 酉阳| 黔西县| 纳雍县| 驻马店市| 溆浦县| 峨眉山市| 凤山县| 平原县| 陇南市| 松溪县| 五寨县| 巴南区| 九江县| 呈贡县| 平邑县| 罗江县| 安新县| 高邑县| 揭阳市| 军事| 克山县| 桂东县| 喀喇沁旗| 龙山县| 江川县| 邢台县|