gpt4 book ai didi

python - 使用装饰器包装一个接受可变数量参数的函数

转载 作者:行者123 更新时间:2023-11-28 22:39:31 24 4
gpt4 key购买 nike

我想创建一个装饰器,它可以用不同数量的变量包装函数。例如,下面我有两个函数 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**kwargsargs 是不带名称的参数列表(例如 func(1,2,3)),而 kwargs 是带名称的参数字典名称(例如 func(x=1, y=2, z=3))。

您的代码只接受 kwargs,因此您还需要添加未命名的 args:

def dec(function):
def _wrapper(*args, **kwargs):
print len(args) + len(kwargs)
return function(*args, **kwargs)
return _wrapper

关于python - 使用装饰器包装一个接受可变数量参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34683034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com