我想学习如何在python函数中传递任意数量的参数,所以我以递归的方式编写了一个简单的sum函数,如下所示:
def mySum(*args):
if len(args) == 1:
return args[0]
else:
return args[-1] + mySum(args[:-1])
但是当我测试mySum(3, 4)
时,我得到了这个错误:
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
有没有人对此有想法,并给我一些线索来纠正它?
发布于 2012-10-30 00:05:47
这一行:
return args[-1] + mySum(args[:-1])
args[:-1]
返回参数元组的一部分。我假设你的目标是使用那片参数递归调用你的函数。不幸的是,您当前的代码只是使用单个对象调用您的函数-切片本身。
您想要做的是调用这些展开的参数。
return args[-1] + mySum(*args[:-1])
^---- note the asterisk
这种技术称为"unpacking argument lists“,而星号有时(非正式地)称为"splat”运算符。
发布于 2012-10-30 00:08:35
如果您不想以递归方式执行此操作:
def mySum(*args):
sum = 0
for i in args:
sum = sum + i
return sum
发布于 2012-10-30 00:05:07
args[:-1]
是一个元组,因此嵌套调用实际上是mySum((4,))
,args[0]
的嵌套返回返回一个元组。因此,最后一行被缩减为return 3 + (4,)
。要解决此问题,您需要在调用mySum时通过将最后一行更改为return args[-1] + mySum(*args[:-1])
来扩展元组。
https://stackoverflow.com/questions/13125218
复制相似问题