首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解python函数中的变长参数?

如何理解python函数中的变长参数?
EN

Stack Overflow用户
提问于 2014-08-03 07:05:34
回答 3查看 4.2K关注 0票数 0

我想写我自己的求和函数,得到变长参数的和。

代码语言:javascript
复制
def myadd(*tuple):
    sum=0
    for element in tuple:
        sum=sum+element
    return(sum)

调用方法1:

代码语言:javascript
复制
myadd(*(1,2,3,4))

这是在这里调用function.no问题的最正式的方式。

调用方法2:

代码语言:javascript
复制
myadd(1,2,3,4)

它也能得到结果,为什么?

调用方法3:

代码语言:javascript
复制
myadd((1,2,3,4))

错误TypeError:不支持的操作数类型为+:'int‘和'tuple’。

在我看来,调用2和调用3不能被python接受,在参数位置没有*操作符吗?您能告诉我python函数的操作原理吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-03 09:00:55

你把变量参数和参数解包装混合在一起。对于初学者来说,这是一个常见的错误,因为他们在语法上都使用相同的*,而且不是完全无关的…。但它们并没有你想象的那么紧密。

这两个电话做的事情完全一样:

代码语言:javascript
复制
myadd(*(1,2,3,4))
myadd(1, 2, 3, 4)

*在这里的意思是“使用以下可迭代的方法,并将其解压到一组独立的参数中。

无论您调用的函数是定义为f(*args)f(a, b, c, d)还是f(a, b, *args),都可以传递给它4个参数。

这意味着方法1不是“调用函数的最正式的方式”;实际上,它只是方法2的一个模糊版本。

另一方面,这并不是一回事:

代码语言:javascript
复制
myadd((1, 2, 3, 4))

它传递一个参数,而这个参数恰好是一个元组。

因此,您的函数定义如下:

代码语言:javascript
复制
def myadd(*tuple):

这意味着不管它传递了什么参数,不管它们是如何传递的(除了关键字参数,但是暂时忽略它),它们将被抛到一个名为tuple的列表中。让我们看看你的三个案子。

在第一种情况下,您要传递4个参数,它们都是整数。因此,tuple得到了一个由4个整数组成的列表。当您在该列表上迭代时,每个成员都是一个整数,因此您可以将它们相加,而不存在任何问题。

在第二种情况下--同样,这是完全相同的--您传递了4个整数,因此tuple得到了一个由4个整数组成的列表。

在第三种情况下,您要传递一个参数,这是一个元组,因此tuple获得了一个包含1个元组的列表。当您迭代该列表时,每个成员都是一个元组,您不能将它添加到一个数字中。

有关更多细节,请参见参数和参数,它具有指向文档中所有有用位置的链接,并希望提供一个可读的概述。

票数 6
EN

Stack Overflow用户

发布于 2014-08-03 07:10:22

您将整个元组作为一个参数传递,而元组不能添加到数字中。如果要将所有元组元素作为单独的参数传递,请使用*运算符:

代码语言:javascript
复制
myadd(*x)
票数 2
EN

Stack Overflow用户

发布于 2014-08-03 07:11:10

代码语言:javascript
复制
def myadd(x):                                
    sum=0                                    
    for element in x:                        
        sum=sum+element                      
    return(sum)                              

x=(1,2,3)                                    
print myadd(x) 

输出

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

https://stackoverflow.com/questions/25102450

复制
相关文章

相似问题

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