日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python中装饰器的理解和实现

發(fā)布時(shí)間:2024/4/11 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中装饰器的理解和实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

裝飾器的簡(jiǎn)單理解:

裝飾器本質(zhì)上是一個(gè)callable object,它可以在讓其他函數(shù)在不需要做任何代碼的變動(dòng)的前提下增加額外的功能。

裝飾器的應(yīng)用場(chǎng)景:

裝飾器的返回值也是一個(gè)函數(shù)的對(duì)象,它經(jīng)常用于以下的場(chǎng)景。比如:插入日志,性能測(cè)試,事務(wù)處理,緩存。權(quán)限的校驗(yàn)等場(chǎng)景,有了裝飾器就可以抽離出大量的與函數(shù)功能本身無關(guān)的雷同代碼并發(fā)并繼續(xù)使用。

舉例1:

編寫一個(gè)帶定長(zhǎng)參數(shù)的裝飾器:

def new_func(func):def wrappedfun(username, passwd):if username == 'root' and passwd == '123456789':print('通過認(rèn)證')print('開始執(zhí)行附加功能')return func()else:print('用戶名或密碼錯(cuò)誤')returnreturn wrappedfun@new_func def origin():print('開始執(zhí)行函數(shù)') origin('root','123456789')

運(yùn)行結(jié)果:

通過認(rèn)證
開始執(zhí)行附加功能
開始執(zhí)行函數(shù)

舉例2:

帶不定長(zhǎng)參數(shù)的裝飾器

def new_func(func):def wrappedfun(*parts):if parts:counts = len(parts)print('本系統(tǒng)包含 ', end='')for part in parts:print(part, ' ',end='')print('等', counts, '部分')return func()else:print('用戶名或密碼錯(cuò)誤')return func()return wrappedfun

舉例3:

寫出一個(gè)計(jì)時(shí)器記錄方法執(zhí)行性能的裝飾器

import time from functools import wraps def time_this_function(func):#作為裝飾器使用,返回函數(shù)執(zhí)行需要花費(fèi)的時(shí)間@wraps(func)def wrapper(*args,**kwargs):start=time.time()result=func(*args,**kwargs)end=time.time()print(func.__name__,end-start)return resultreturn wrapper if __name__=='__main__':@time_this_functiondef count_number(n):while n>0:time.sleep(0.1)n+=-1count_number(10)

運(yùn)行結(jié)果:

count_number 1.0461959838867188

總結(jié)

以上是生活随笔為你收集整理的Python中装饰器的理解和实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。