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

Python中的裝飾器使用

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

Python裝飾器用法

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

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

但事實(shí)上,裝飾器本身也只是個函數(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

這一個裝飾器,當(dāng)我們這樣使用時

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

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

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

同樣的道理,假設(shè)我們定義了一個帶參數(shù)的裝飾器logging,它實(shí)際上執(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

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

例如上例

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

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

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

這個來自functools模塊的裝飾器能幫你復(fù)制函數(shù)的元信息到被綁定的函數(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

當(dāng)我們再運(yùn)行

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

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

裝飾器定義時加@wraps是個好習(xí)慣。

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

總結(jié)

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

相關(guān)文章

  • python3.9和pycharm的安裝教程并創(chuàng)建簡單項目的步驟

    python3.9和pycharm的安裝教程并創(chuàng)建簡單項目的步驟

    這篇文章主要介紹了python3.9和pycharm的安裝教程并創(chuàng)建簡單項目的步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • AI:如何訓(xùn)練機(jī)器學(xué)習(xí)的模型

    AI:如何訓(xùn)練機(jī)器學(xué)習(xí)的模型

    這篇文章主要介紹了是如何進(jìn)行機(jī)器學(xué)習(xí)的模型的訓(xùn)練,全文邏輯清晰,簡單易懂,如果您正在學(xué)習(xí)機(jī)器學(xué)習(xí)那么可以參考下,說不定會有不一樣的收貨
    2021-04-04
  • python如何實(shí)現(xiàn)數(shù)據(jù)的線性擬合

    python如何實(shí)現(xiàn)數(shù)據(jù)的線性擬合

    這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)數(shù)據(jù)的線性擬合,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 舉例講解Python中is和id的用法

    舉例講解Python中is和id的用法

    這篇文章主要介紹了舉例講解Python中is和id的用法,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,作者舉例進(jìn)行了簡單說明,需要的朋友可以參考下
    2015-04-04
  • python文件特定行插入和替換實(shí)例詳解

    python文件特定行插入和替換實(shí)例詳解

    這篇文章主要介紹了python文件特定行插入和替換實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Python中的變量、運(yùn)算符與流程控制

    Python中的變量、運(yùn)算符與流程控制

    本文詳細(xì)講解了Python中的變量、運(yùn)算符與流程控制,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗證碼

    OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗證碼

    本文主要介紹了OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗證碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python存取XML的常見方法實(shí)例分析

    Python存取XML的常見方法實(shí)例分析

    這篇文章主要介紹了Python存取XML的常見方法,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了Python存取xml的常用方法、優(yōu)缺點(diǎn)比較與相關(guān)注意事項,需要的朋友可以參考下
    2017-03-03
  • python二進(jìn)制轉(zhuǎn)換模塊的具體用法

    python二進(jìn)制轉(zhuǎn)換模塊的具體用法

    在pyton中,通過struct模塊來對二進(jìn)制進(jìn)行轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python使用Flask框架同時上傳多個文件的方法

    Python使用Flask框架同時上傳多個文件的方法

    這篇文章主要介紹了Python使用Flask框架同時上傳多個文件的方法,實(shí)例分析了Python中Flask框架操作文件實(shí)現(xiàn)上傳的技巧,需要的朋友可以參考下
    2015-03-03

最新評論

汕尾市| 英山县| 克山县| 清水河县| 资兴市| 筠连县| 揭西县| 长阳| 博湖县| 曲靖市| 汕头市| 东辽县| 吴桥县| 黄陵县| 东莞市| 奈曼旗| 曲靖市| 镇赉县| 固安县| 临湘市| 泽库县| 上饶市| 长治县| 阳城县| 望江县| 西盟| 武汉市| 洛浦县| 淅川县| 连云港市| 新营市| 虞城县| 互助| 牙克石市| 邹城市| 图们市| 垫江县| 广安市| 邻水| 油尖旺区| 平湖市|