如果参数的数量是任意长的话,如何使用装饰器返回给定函数并修改其所有参数?我的任务是将输入函数中的所有参数大写到装饰器,我无法弄清楚如何将无限量的新参数传递回函数。
我在理论上正在尝试这个:
def allCaps(func):
def ret(*args):
return func(*args.upper())
return ret
但你无法修改元组,因此它无法正常工作
答案 0 :(得分:1)
类似的东西:
def allCaps(func):
def wrapper(*args, **kwargs):
if not all(isinstance(arg,str) for arg in args):
# use isinstance(basestr, arg) for arg in args in python2
raise TypeError("Wrong argument type")
else:
return func(*[arg.upper() for arg in args], **kwargs)
return wrapper
@allCaps
def this_function_needs_allcaps(*args, **kwargs):
print("These are my arguments!")
for arg in args:
print(arg)
答案 1 :(得分:0)
您希望使用参数构建一个新列表(它也可能是一个元组; Python *语法只需要一个可迭代的),如下所示:
new_args = [arg.upper() for arg in args]
return func(*new_args)