首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Python可变参数的有关问题

2013-01-02 
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]...)

热点排行