首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python函数中任意数量的参数

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

Stack Overflow用户
提问于 2012-10-30 00:00:38
回答 6查看 25.7K关注 0票数 22

我想学习如何在python函数中传递任意数量的参数,所以我以递归的方式编写了一个简单的sum函数,如下所示:

代码语言:javascript
复制
def mySum(*args):
  if len(args) == 1:
    return args[0]
  else:
    return args[-1] + mySum(args[:-1])

但是当我测试mySum(3, 4)时,我得到了这个错误:

代码语言:javascript
复制
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

有没有人对此有想法,并给我一些线索来纠正它?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-30 00:05:47

这一行:

代码语言:javascript
复制
return args[-1] + mySum(args[:-1])

args[:-1]返回参数元组的一部分。我假设你的目标是使用那片参数递归调用你的函数。不幸的是,您当前的代码只是使用单个对象调用您的函数-切片本身。

您想要做的是调用这些展开的参数。

代码语言:javascript
复制
return args[-1] + mySum(*args[:-1])
                        ^---- note the asterisk

这种技术称为"unpacking argument lists“,而星号有时(非正式地)称为"splat”运算符。

票数 15
EN

Stack Overflow用户

发布于 2012-10-30 00:08:35

如果您不想以递归方式执行此操作:

代码语言:javascript
复制
def mySum(*args):
    sum = 0
    for i in args:
        sum = sum + i
    return sum
票数 2
EN

Stack Overflow用户

发布于 2012-10-30 00:05:07

args[:-1]是一个元组,因此嵌套调用实际上是mySum((4,))args[0]的嵌套返回返回一个元组。因此,最后一行被缩减为return 3 + (4,)。要解决此问题,您需要在调用mySum时通过将最后一行更改为return args[-1] + mySum(*args[:-1])来扩展元组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13125218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档