python函数中的任意数量的参数

wei*_*wei 21 python

我想学习如何在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"运算符.