我想学习如何在 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'
有谁对此有想法并给出一些线索来纠正它?
这行:
return args[-1] + mySum(args[:-1])
args[:-1]
返回参数元组的一个切片。我假设您的目标是使用该参数片段递归调用您的函数。不幸的是,您当前的代码只是使用单个对象(切片本身)调用您的函数。
相反,您想要做的是在展开这些参数的情况下进行调用。
return args[-1] + mySum(*args[:-1])
^---- note the asterisk
这种技术被称为“解压参数列表 http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists,”,星号有时(非正式地)称为“splat”运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)