我想学习如何在python函数中传递任意数量的args,所以我以递归的方式编写了一个简单的sum函数,如下所示:
def mySum(*args):
if len(args) == 1:
return args[0]
else:
return args[-1] + mySum(args[:-1])
Run Code Online (Sandbox Code Playgroud)
但是当我测试时mySum(3, 4)
,我收到了这个错误:
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
Run Code Online (Sandbox Code Playgroud)
有没有人对此有所了解并给我一些线索来纠正它?
voi*_*hos 14
这一行:
return args[-1] + mySum(args[:-1])
Run Code Online (Sandbox Code Playgroud)
args[:-1]
返回一个参数元组的切片.我假设你的目标是使用参数片段递归调用你的函数.不幸的是,您当前的代码只是使用单个对象调用您的函数 - 切片本身.
你要做的是用那些展开的args打电话.
return args[-1] + mySum(*args[:-1])
^---- note the asterisk
Run Code Online (Sandbox Code Playgroud)
这种技术称为" 解包参数列表 ",星号有时(非正式地)称为"splat"运算符.