我想寫一個python函數裝飾器,它測試某個函數的某些參數是否通過某些標準。對於例如,假設我想測試的一些參數總是偶數,那麼我希望能夠做這樣的事(不是有效的Python代碼)如何將特定參數傳遞給python中的裝飾器
def ensure_even(n) :
def decorator(function) :
@functools.wraps(function)
def wrapper(*args, **kwargs):
assert(n % 2 == 0)
return function(*args, **kwargs)
return wrapper
return decorator
@ensure_even(arg2)
def foo(arg1, arg2, arg3) : pass
@ensure_even(arg3)
def bar(arg1, arg2, arg3) : pass
但我想不出如何實現以上。有沒有辦法將特定參數傳遞給裝飾器? (如上面的arg2 for foo和arg3 for bar)
謝謝!
製作參數化裝飾器的唯一方法是使用嵌套裝飾器。 – 2010-06-30 19:07:35