簡體   English   中英

使用裝飾器包裝帶有可變數量參數的函數

[英]Wrapping a functions taking a variable number of arguments using a decorator

我想創建一個裝飾器,它可以包裝具有不同數量變量的函數。 例如,下面有兩個函數abcabcd ,分別帶有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM