python中的函数修饰器
生活随笔
收集整理的這篇文章主要介紹了
python中的函数修饰器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python中的函數修飾器 – @wrapper
簡介
類似于C#的屬性、Java的注解,python也有對應的修飾符。從Python2.7和Python3開始,提供了以’@’為標示的修飾符,可以在模塊或者類的定義層次內對函數進行修飾。
定義形式
修飾符定義出現在函數定義的前一行,不允許和函數定義在同一行;并且支持多個修飾符,每行一個。
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE dotted_name ::= identifier ("." identifier)*使用
一個修飾符就是一個函數,它將被修飾的函數作為參數,并返回修飾后的同名函數或其他可調用的函數對象。
而且,函數修飾符可以如下形式嵌套.
這相當于如下代碼:
def func(): passfunc = f1(arg)(f2(func))示例
示例1–簡單的decorator
# encoding=utf-8 """ python decorator sample簡單的python修飾符示例 """ ## 定義的decoration 處理函數 def ann1(fn):def samplejob(*args):print("ann1's sample job.")fn(*args) ## 必須的,否則被修飾的函數不被調用,無法執行了。return samplejobdef ann2(fn):def _decorator(*args):print("ann2:\r\nget params: ")for item in args:print itemprint("\r\ncalculate result: ")fn(*args) ## 必須的,否則被修飾的函數不被調用,無法執行了。return _decorator@ann1 @ann2 def mult(a,b):print(a*b)if __name__ == "__main__":mult(2,5)示例2–帶參數的decorator
# encoding=utf-8 """ python decorator sample:帶參數的python修飾符 """ ## 定義的decoration修飾器及處理函數 def attrs(**kwds):def decorate(f):## 可以訪問傳入的參數kwdsprint "decorate attr: ", len(kwds)for k in kwds:# def setattr(object, name, value):# Set a named attribute on an object; setattr(x, 'y', v) is equivalent to `x.y = v''.setattr(f, k, kwds[k]) return freturn decorate@attrs(versionNeeded="2.7",author="David",dt="2018-01-01") def test_method(f):# def getattr(object, name, default)# getattr(object, name[, default]) -> valueprint(getattr(test_method,'versionNeeded',0))print(getattr(test_method,'author','none'))print(getattr(test_method,'dt','2000-01-01'))print 'working with param:', fif __name__ == "__main__":test_method(8)總結
以上是生活随笔為你收集整理的python中的函数修饰器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超额120倍 电影《流浪地球2》周边众筹
- 下一篇: websocket python爬虫_p