>>> class Test(object):
>>> def test(self,*arg):
>>> print(arg[0],arg[1])
>>> p = Test()
>>> t = 2,3
>>> p.test(t)
给我IndexError:元组索引超出范围
为什么?以及如何获得该元组的值?
答案 0 :(得分:6)
你只传入了一个参数(整个元组(2, 3)
),所以只存在arg[0]
;如果您将元组值视为单独的参数,请使用*args
调用语法:
p.test(*t)
替代方法是不在函数定义中使用*arg
catchall参数:
def test(self, arg):
现在,您的函数有两个普通位置参数self
和arg
。您只能传递一个参数,如果这是您的元组,arg[0]
和arg[1]
将按预期工作。
答案 1 :(得分:1)
使用您的演示类:
>>> class Test(object):
>>> def test(self,*arg):
>>> print(arg[0],arg[1])
这样做时:
>>> p = Test()
>>> t = 2,3
>>> p.test(t)
arg
的值为[(1,2),]
这样做时:
>>> p = Test()
>>> t = 2,3
>>> p.test(*t)
arg
的值为[1,2]
函数中的*
表示所有剩余的参数(非关键字)都会被放入列表中。
在第一种情况下,您发送(1,2)
只有一个参数。在第二种情况下,使用*
将元组组成单独的参数,因此您发送1
和2
。
有关此内容的完整文档,请参阅此Python文章: http://docs.python.org/2/reference/expressions.html#calls