當前位置:首頁 » 編程語言 » 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源碼中只是對裝飾器參數進行了處理.

熱點內容
優酷怎麼給視頻加密 發布:2025-05-14 19:31:34 瀏覽:633
夢三國2副本腳本 發布:2025-05-14 19:29:58 瀏覽:859
phpxmlhttp 發布:2025-05-14 19:29:58 瀏覽:432
Pua腳本 發布:2025-05-14 19:24:56 瀏覽:448
蘋果像素低為什麼比安卓好 發布:2025-05-14 19:13:23 瀏覽:460
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:271
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:970
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25
仙境傳說ro解壓失敗 發布:2025-05-14 18:45:01 瀏覽:868
betweenand的用法sql 發布:2025-05-14 18:39:25 瀏覽:250