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

Python中的裝飾器使用

 更新時間:2022年12月19日 09:21:42   作者:子休_  
這篇文章主要介紹了Python中的裝飾器使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Python裝飾器用法

Python的裝飾器是個好東西,它能干很多事情。

但對于新手,它看起來似乎沒那么簡單。

但事實上,裝飾器本身也只是個函數(shù)。

import time
def log(func):
? ? def wrapper(*args, **kwargs):
? ? ? ? start = time.time()
? ? ? ? result = func(*args, **kwargs)
? ? ? ? end = time.time()
? ? ? ? print("The func '{}' used {}s.".format(func.__name__, end-start))
? ? ? ? return result
? ? return warpper

這一個裝飾器,當我們這樣使用時

@log
def fucok(name):
? ? """Fucok someone"""
? ? print("Fucok", name)

它只是執(zhí)行了fucok = log(fucok)這樣一句代碼而已。

也就是說,我們表面上是用fucok("myself"),事實上執(zhí)行的都是log(fucok)("myself")。因為Python里面都是對象嘛。

同樣的道理,假設我們定義了一個帶參數(shù)的裝飾器logging,它實際上執(zhí)行的是

func = logging(arguments)(func)

也就是上面那個不帶參數(shù)的裝飾器多定義一層就行了。

import time
def logging(arguments):
? ? def log(func):
? ? ? ? def warpper(*args, **kwargs):
? ? ? ? ? ? start = time.time()
? ? ? ? ? ? result = func(*args, **kwargs)
? ? ? ? ? ? end = time.time()
? ? ? ? ? ? print("The func '{}' used {}s.".format(func.__name__, end-start))
? ? ? ? ? ? return result
? ? ? ? return warpper
? ? # do something
? ? return log

但,當我們使用一個裝飾器之后,它會將原本的函數(shù)元信息給覆蓋掉。譬如:函數(shù)名稱,函數(shù)文檔等等。

例如上例

print(fucok.__name__)
print(fucok.__doc__)

你會發(fā)現(xiàn),函數(shù)信息全部沒了!fucok它不叫fucok,改名叫wrapper了。它的文檔也變成了none。

解決辦法很簡單,定義裝飾器的時候用warps裝飾器裝飾接受原函數(shù)參數(shù)的那一層就行了。

這個來自functools模塊的裝飾器能幫你復制函數(shù)的元信息到被綁定的函數(shù)身上。

修改裝飾器如下(其實就加了一行代碼hhh)

import time
from functools import wraps
def log(func):
? ? @wraps(func)
? ? def warpper(*args, **kwargs):
? ? ? ? start = time.time()
? ? ? ? result = func(*args, **kwargs)
? ? ? ? end = time.time()
? ? ? ? print("The func '{}' used {}s.".format(func.__name__, end-start))
? ? ? ? return result
? ? return warpper

當我們再運行

print(fucok.__name__)
print(fucok.__doc__)

就能看到函數(shù)的的元信息沒變了。

裝飾器定義時加@wraps是個好習慣。

一個較為實用的裝飾器demo在該專題的另一篇文章:函數(shù)參數(shù)類型檢查

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • libreoffice python 操作word及excel文檔的方法

    libreoffice python 操作word及excel文檔的方法

    這篇文章主要介紹了libreoffice python 操作word及excel文檔的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python簡單獲取自身外網(wǎng)IP的方法

    Python簡單獲取自身外網(wǎng)IP的方法

    這篇文章主要介紹了Python簡單獲取自身外網(wǎng)IP的方法,涉及Python基于第三方平臺獲取本機外網(wǎng)IP的操作技巧,需要的朋友可以參考下
    2016-09-09
  • python 統(tǒng)計數(shù)組中元素出現(xiàn)次數(shù)并進行排序的實例

    python 統(tǒng)計數(shù)組中元素出現(xiàn)次數(shù)并進行排序的實例

    今天小編就為大家分享一篇python 統(tǒng)計數(shù)組中元素出現(xiàn)次數(shù)并進行排序的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 淺談Python中用datetime包進行對時間的一些操作

    淺談Python中用datetime包進行對時間的一些操作

    下面小編就為大家?guī)硪黄獪\談Python中用datetime包進行對時間的一些操作。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Python創(chuàng)建Getter和Setter的方法詳解

    Python創(chuàng)建Getter和Setter的方法詳解

    Getters?和?Setters?是幫助我們設置類變量或?qū)傩远鵁o需直接訪問的方法,這篇文章主要和大家介紹了如何在Python中創(chuàng)建Getter和Setter,需要的可以參考下
    2023-10-10
  • Python相互導入的問題解決

    Python相互導入的問題解決

    大家好,本篇文章主要講的是Python相互導入的問題解決,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Python?PyQt拖動控件對齊到網(wǎng)格的方法步驟

    Python?PyQt拖動控件對齊到網(wǎng)格的方法步驟

    pyqt是一個用于創(chuàng)建GUI應用程序的跨平臺工具包,它將python與qt庫融為一體,下面這篇文章主要給大家介紹了關(guān)于Python?PyQt拖動控件對齊到網(wǎng)格的方法步驟,需要的朋友可以參考下
    2022-12-12
  • 解決Python調(diào)用df.to_csv()出現(xiàn)中文亂碼的問題

    解決Python調(diào)用df.to_csv()出現(xiàn)中文亂碼的問題

    在Python使用df.to_csv()時,若出現(xiàn)中文亂碼,可通過加入?yún)?shù)encoding="utf_8_sig"解決,"utf-8"編碼不包含BOM,直接處理文件時會將BOM誤讀為內(nèi)容;而"utf_8_sig"會識別并處理BOM,避免亂碼,此方法為實踐經(jīng)驗,供參考
    2024-09-09
  • Request的中斷和ErrorHandler實例解析

    Request的中斷和ErrorHandler實例解析

    這篇文章主要介紹了Request的中斷和ErrorHandler實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python字典“鍵”和“值”的排序5種方法

    Python字典“鍵”和“值”的排序5種方法

    這篇文章主要介紹了5種Python字典“鍵”和“值”的排序方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論