使用带有动态参数的函数调用时的元组索引

时间:2013-10-24 13:01:44

标签: python

>>> class Test(object):
>>>    def test(self,*arg):
>>>       print(arg[0],arg[1])
>>> p = Test()
>>> t = 2,3
>>> p.test(t)

给我IndexError:元组索引超出范围

为什么?以及如何获得该元组的值?

2 个答案:

答案 0 :(得分:6)

你只传入了一个参数(整个元组(2, 3)),所以只存在arg[0];如果您将元组值视为单独的参数,请使用*args调用语法:

p.test(*t)

替代方法是在函数定义中使用*arg catchall参数:

def test(self, arg):

现在,您的函数有两个普通位置参数selfarg。您只能传递一个参数,如果这是您的元组,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)只有一个参数。在第二种情况下,使用*将元组组成单独的参数,因此您发送12

有关此内容的完整文档,请参阅此Python文章: http://docs.python.org/2/reference/expressions.html#calls