當前位置:首頁 » 編程語言 » pythontor

pythontor

發布時間: 2023-07-13 20:30:06

『壹』 python中支持參數的裝飾器要比無參數的多一層什麼函數

1. 函數帶多個參數
# 普通的裝飾器, 列印函數的運行時間
def decrator(func):
def wrap(*args, **kwargs):
start_time = time.time()
res = func(*args, **kwargs)
end_time = time.time()
print('運行時間為', end_time-start_time)
return res
return wrap
2. 裝飾器帶有多個參數
當裝飾器帶有多個參數的時候, 裝飾器函數就需要多加一層嵌套:
比如:
def decrator(*dargs, **dkargs):
def wrapper(func):
def _wrapper(*args, **kargs):
print ("裝飾器參數:", dargs, dkargs)
print ("函數參數:", args, kargs)
return func(*args, **kargs)
return _wrapper
return wrapper
為什麼被裝飾函數體可以傳入內層呢?
裝飾器函數有多個參數, 需要以
@decrator(1, a=2)
的方式使用, 這時候decrator是已經執行的(因為加了括弧), 可以粗略的理解為載入被裝飾函數的上的是wrapper, 所以這和普通的裝飾器並無差別.
又如flask源碼中的:
def route(self, rule, **options):
"""Like :meth:`Flask.route` but for a blueprint. The endpoint for the
:func:`url_for` function is prefixed with the name of the blueprint.
"""
def decorator(f):
endpoint = options.pop("endpoint", f.__name__)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator
flask的藍圖route源碼中的裝飾器, 最內層直接返回return f 並沒有多加一層處理的函數, 在無需對被裝飾函數進行過多處理的時候這是較為方便的做法. route源碼中只是對裝飾器參數進行了處理.

熱點內容
sift演算法詳解 發布:2025-02-08 18:35:23 瀏覽:579
linux標准錯誤的是 發布:2025-02-08 18:32:07 瀏覽:915
蠻多小說怎麼緩存書架的小說 發布:2025-02-08 18:30:16 瀏覽:888
光遇花開腳本封號嗎 發布:2025-02-08 18:23:15 瀏覽:534
怎麼弄ld帳號和密碼 發布:2025-02-08 18:11:42 瀏覽:628
新逍客20發動機壓縮比 發布:2025-02-08 17:58:10 瀏覽:115
qq號和密碼我都知道為什麼登不上 發布:2025-02-08 17:52:21 瀏覽:872
寶塔伺服器ip進不去 發布:2025-02-08 17:52:18 瀏覽:382
擔保中介源碼 發布:2025-02-08 17:14:37 瀏覽:413
手機存儲卡速度測試 發布:2025-02-08 17:02:57 瀏覽:26