我想写我自己的求和函数,得到变长参数的和。
def myadd(*tuple):
sum=0
for element in tuple:
sum=sum+element
return(sum)调用方法1:
myadd(*(1,2,3,4))这是在这里调用function.no问题的最正式的方式。
调用方法2:
myadd(1,2,3,4)它也能得到结果,为什么?
调用方法3:
myadd((1,2,3,4))错误TypeError:不支持的操作数类型为+:'int‘和'tuple’。
在我看来,调用2和调用3不能被python接受,在参数位置没有*操作符吗?您能告诉我python函数的操作原理吗?
发布于 2014-08-03 09:00:55
你把变量参数和参数解包装混合在一起。对于初学者来说,这是一个常见的错误,因为他们在语法上都使用相同的*,而且不是完全无关的…。但它们并没有你想象的那么紧密。
这两个电话做的事情完全一样:
myadd(*(1,2,3,4))
myadd(1, 2, 3, 4)*在这里的意思是“使用以下可迭代的方法,并将其解压到一组独立的参数中。
无论您调用的函数是定义为f(*args)、f(a, b, c, d)还是f(a, b, *args),都可以传递给它4个参数。
这意味着方法1不是“调用函数的最正式的方式”;实际上,它只是方法2的一个模糊版本。
另一方面,这并不是一回事:
myadd((1, 2, 3, 4))它传递一个参数,而这个参数恰好是一个元组。
因此,您的函数定义如下:
def myadd(*tuple):这意味着不管它传递了什么参数,不管它们是如何传递的(除了关键字参数,但是暂时忽略它),它们将被抛到一个名为tuple的列表中。让我们看看你的三个案子。
在第一种情况下,您要传递4个参数,它们都是整数。因此,tuple得到了一个由4个整数组成的列表。当您在该列表上迭代时,每个成员都是一个整数,因此您可以将它们相加,而不存在任何问题。
在第二种情况下--同样,这是完全相同的--您传递了4个整数,因此tuple得到了一个由4个整数组成的列表。
在第三种情况下,您要传递一个参数,这是一个元组,因此tuple获得了一个包含1个元组的列表。当您迭代该列表时,每个成员都是一个元组,您不能将它添加到一个数字中。
有关更多细节,请参见参数和参数,它具有指向文档中所有有用位置的链接,并希望提供一个可读的概述。
发布于 2014-08-03 07:10:22
您将整个元组作为一个参数传递,而元组不能添加到数字中。如果要将所有元组元素作为单独的参数传递,请使用*运算符:
myadd(*x)发布于 2014-08-03 07:11:10
def myadd(x):
sum=0
for element in x:
sum=sum+element
return(sum)
x=(1,2,3)
print myadd(x) 输出
6https://stackoverflow.com/questions/25102450
复制相似问题