Python中装饰器的理解和实现
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 找出一个整数数组中,第二大
- 下一篇: Python中hasattr() get