python装饰器函数传参
生活随笔
收集整理的這篇文章主要介紹了
python装饰器函数传参
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python裝飾器函數傳參?
裝飾器
裝飾器是一個返回函數的高階函數。
- 裝飾器常見用法:
打印日志
在函數執行前,打印一行日志do...;函數執行結束,打印一行日志finish。執行結果如下:
do add 3 + 5 = 8 finish計算時間
import timedef timer(func):def wrapper(*args, **kw):t1 = time.time()func(*args,**kw)t2 = time.time()cost_time = t2 - t1print 'cost time: {} s'.format(cost_time)return wrapper@timer def cost_time(sleep_time):time.sleep(sleep_time)cost_time(10)- 帶參數的函數裝飾器
裝飾器本身是一個函數,使用兩層嵌套傳參,執行結果如下:
hi i am from usa ---------------------- hello i am from england- 不帶參數的類裝飾器
基于類裝飾器的實現,必須實現__call__和__init__兩個內置函數。
__init__ :接收被裝飾函數
__call__ :實現裝飾邏輯
運行結果如下:
the function say() is running... say hello!- 帶參數的類裝飾器
帶參數和不帶參數的類裝飾器有很大的不同。
__init__ :不再接收被裝飾函數,而是接收傳入參數
__call__ :接收被裝飾函數,實現裝飾邏輯
運行結果如下:
WARNING: the function say () is running... say hello!函數的參數
- 位置參數
power(x, n)函數有兩個參數:x和n,這兩個參數都是位置參數,調用函數時,傳入的兩個值按照位置順序依次賦值給參數x和n。
- 默認參數
power(x, n)函數有兩個參數:x和n,如果想在不傳入n值時,默認計算x的平方,此時可以將n設為默認值2。
- 可變參數(*args)
定義可變參數時,需要在參數前面加一個*號,可變參數的個數是可變的。在函數內部,參數*args接收到的是一個tuple。輸出結果如下:
1 <type 'int'> (2, 'a', 'b', 'c') <type 'tuple'>- 關鍵字參數(**kwargs)
**kwargs允許將不定長度的鍵值對,作為參數傳遞給一個函數,關鍵字參數在函數內部自動組裝為一個dict。輸出結果如下:
name: mark age: 30 other: {'city': 'shanghai'} <type 'dict'>- 將函數作為參數傳遞給另一個函數
function()函數將hi函數作為參數接收,輸出結果如下:
just test hi friendstime模塊
- 獲取當前時間
- 獲取格式化的時間
- 格式化日期
- 計算運行時間
總結
以上是生活随笔為你收集整理的python装饰器函数传参的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyQt5 QTreeWidget更改i
- 下一篇: html网页的结构框架代码