[英]Wrapping a functions taking a variable number of arguments using a decorator
我想創建一個裝飾器,它可以包裝具有不同數量變量的函數。 例如,下面有兩個函數abc
和abcd
,分別帶有2和3個參數。 我希望包裝器采用可變數量的參數來處理此問題。 但是,當我運行代碼時,我得到TypeError: _wrapper() takes exactly 0 arguments (2 given)
,好像**kwargs
被忽略了。
為什么會這樣,我該如何解決?
def dec(function):
def _wrapper(**kwargs):
print len(kwargs)
function(**kwargs)
return _wrapper
@dec
def abc(a, b):
return a*b
@dec
def abcd(a, b, c):
return a*b*c
Python有兩個變量參數變量: *args
和**kwargs
。 args
是沒有名稱指定的參數列表(例如func(1,2,3)
),而kwargs
是具有名稱的參數字典(例如func(x=1, y=2, z=3)
)。
您的代碼僅接受kwarg,因此您還需要添加未命名的args:
def dec(function):
def _wrapper(*args, **kwargs):
print len(args) + len(kwargs)
return function(*args, **kwargs)
return _wrapper
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.