将不同数量的参数传递给函数

时间:2011-11-08 19:42:09

标签: python

我有一个功能:

def save(self, text, *index): 
    file.write(text + '\nResults:\n')
    if index == (): index = (range(len(self.drinkList)))
    for x in index:
        for y in self.drinkList[x].ing:
            file.write('min: ' + str(y.min) + ' max: ' + str(y.max) + ' value: ' + str(y.perc) + '\n')
        file.write('\n\n')
    file.write('\nPopulation fitness: ' + str(self.calculatePopulationFitness()) + '\n\n----------------------------------------------\n\n')

现在,当我传递一个参数作为索引时,函数按预期工作,但是当我传递2个索引的元组时,我得到一个TypeError:list indices必须是整数,而不是元组。我应该改变什么?

4 个答案:

答案 0 :(得分:5)

save(self, text, *index)语法表示index is itself a tuple savetext之后传递给myobject.save("sample text", 1, 2, 3) 的所有参数。

因此,例如,如果您的代码中有:

index

然后(1, 2, 3)将成为元组for x in index1将正确循环值23myobject.save("sample text", (1,2))

另一方面,如果你有L

index

然后((1,2),)将成为1元素元组x(1,2) 循环将获得值TypeError,因此{{1}}。

答案 1 :(得分:3)

这取决于您实际尝试传递的参数。我认为你召唤了一些东西:

object.save("hello world", (3, 4, 5))

使用*运算符时,不需要将可变数量的参数作为元组传递。相反,您在固定参数之后传递的所有内容都将包装到列表中。因此,在这种情况下,变量index指的是[(3, 4, 5)],而不是[3, 4, 5]

您应该像这样调用函数save

object.save("hello world", 3, 4, 5)

变量index现在引用[3, 4, 5]

如果出于某种原因,您仍希望传递元组,只需将函数定义更改为:

def save(self, text, index): # Observe the lack of '*'

答案 2 :(得分:1)

使用* index定义,您必须将函数调用为save(self, text, index1, index2),而index将是元组(index1, index2)。如果您在论证save之后将元组传递给text,则可以将*退出。

答案 3 :(得分:0)

而不是使用像

这样的索引元组来调用你的方法
x.save("ababs",(0,1))

用一个接一个的索引来称呼它,好像它们是方法的不同参数

x.save("ababs",0,1)