Python中装饰器的理解和实现
生活随笔
收集整理的這篇文章主要介紹了
Python中装饰器的理解和实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
裝飾器的簡單理解:
裝飾器本質上是一個callable object,它可以在讓其他函數在不需要做任何代碼的變動的前提下增加額外的功能。
裝飾器的應用場景:
裝飾器的返回值也是一個函數的對象,它經常用于以下的場景。比如:插入日志,性能測試,事務處理,緩存。權限的校驗等場景,有了裝飾器就可以抽離出大量的與函數功能本身無關的雷同代碼并發并繼續使用。
舉例1:
編寫一個帶定長參數的裝飾器:
def new_func(func):def wrappedfun(username, passwd):if username == 'root' and passwd == '123456789':print('通過認證')print('開始執行附加功能')return func()else:print('用戶名或密碼錯誤')returnreturn wrappedfun@new_func def origin():print('開始執行函數') origin('root','123456789')運行結果:
通過認證
開始執行附加功能
開始執行函數
舉例2:
帶不定長參數的裝飾器
def new_func(func):def wrappedfun(*parts):if parts:counts = len(parts)print('本系統包含 ', end='')for part in parts:print(part, ' ',end='')print('等', counts, '部分')return func()else:print('用戶名或密碼錯誤')return func()return wrappedfun舉例3:
寫出一個計時器記錄方法執行性能的裝飾器
import time from functools import wraps def time_this_function(func):#作為裝飾器使用,返回函數執行需要花費的時間@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)運行結果:
count_number 1.0461959838867188
總結
以上是生活随笔為你收集整理的Python中装饰器的理解和实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 找出一个整数数组中,第二大
- 下一篇: Python中hasattr() get