Python可变参数的问题一个利用可变参数求和的函数如下:def sum(*arg):if len(arg)0:s 0for i in range(l
Python可变参数的问题
一个利用可变参数求和的函数如下:
def sum(*arg):
if len(arg)>0:
s =0
for i in range(len(arg)):
s+=arg[i]
return s
return 0
若s是一个set,
s=(1,2,3,4)
那么,
>>> sum(s)
TypeError: unsupported operand type(s) for +=: 'int' and 'tuple'
但是
>>> sum(*s)
10
*s代表什么 ??
[解决办法]变长参数*arg是将输入转为一个tuple的
所以你直接sum(s)会发现报错,无法对int和tuple类型使用+=
但是sum(*s)调用sum(*arg)时,arg就是s本身,因此正确.
具体可以用下面的小代码来测试传入函数的arg到底等于什么,帮助理解
>>> def sums(*arg):
print arg
>>> s
(1, 2, 3, 4)
>>> sums(s)
((1, 2, 3, 4),)
>>> sums(*s)
(1, 2, 3, 4)
>>>
[解决办法]楼上写得很清楚了,不带*号的话,整个元祖是视为第一个参数……
等价于fun(s,),在函数内部arg[0]==(1, 2, 3, 4)了
带*号就等价于fun(s[0], s[1], s[2]...)