當前位置:首頁 » 編程語言 » 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-09-14 11:33:41 瀏覽:640
破解編程貓 發布:2025-09-14 11:33:04 瀏覽:174
syslog源碼 發布:2025-09-14 11:32:55 瀏覽:385
sqllocalhost 發布:2025-09-14 11:31:14 瀏覽:122
winformftp 發布:2025-09-14 11:04:24 瀏覽:685
三星解除加密設備 發布:2025-09-14 10:41:50 瀏覽:741
android和前端 發布:2025-09-14 10:41:07 瀏覽:946
觸發腳本嗎 發布:2025-09-14 10:40:54 瀏覽:378
紅米3手機怎麼不鎖屏密碼 發布:2025-09-14 10:34:03 瀏覽:542
C語言的後門 發布:2025-09-14 10:30:59 瀏覽:278