python函数的可变长度参数
def myadd(*tuple):sum=0
for element in tuple:
sum=sum+element
return(sum)
上面这个函数很简单,现在我调用它。
myadd(*(1,2,3,4))可以得到结果,我明白。
myadd(1,2,3,4)
为何可以得出10这个结果?
我的理解是根本就不应该接受参数,它根本就不是*args 这样的模式?请多谈谈大道理。
小声问一下, *args 这是什么用法呀?
难道是 C 中的指针么? :em03: 回复 2# q1208c
*arg:是把对应的参数当作tuple处理
**arg: 是把对应的参数按照dict方式处理 回复 3# icymirror
多谢指点. :em02: :em02:
本帖最后由 icymirror 于 2014-08-04 11:20 编辑
回复 1# luofeiyu_cu
*arg是把对应的所有参数作为一个tuple来处理。引入这个的另外一个原因是为了一定程度的确保输入参数不会被修改。
你使用*()相当于显式的做了处理。
通常情况下,(*arg)相当于是arg = tuple(所有传入的参数)
略具体点的理解可以试下下面的代码:def myTupFun(*arg):
for item in arg:
print item
myTupFun()
输出
myTupFun(, )
输出
myTupFun(1, 2, 3, 4)
输出
1
2
3
4
myTupFun((1234))
输出
(1, 2, 3, 4) 感觉这里没有处理好,语义与语形的关系,用语义来传递这种含义。
严格的说,当你这样定义:
def myTupFun(*arg):
for item in arg:
print item
myTupFun(1,2,3,4) 这样就应当报错,只能这样用myTupFun(*(1,2,3,4) )或者 myTupFun(* ) ,这样才能从形式化方面讲得通,个人坚持认为这是一个小bug. 回复 6# luofeiyu_cu
如果这个已经写进手册了,这就是一个特性,而不是一个BUG了。:wink:
页:
[1]