我有一个功能:
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必须是整数,而不是元组。我应该改变什么?
答案 0 :(得分:5)
save(self, text, *index)
语法表示index
is itself a
tuple save
在text
之后传递给myobject.save("sample text", 1, 2, 3)
的所有参数。
因此,例如,如果您的代码中有:
index
然后(1, 2, 3)
将成为元组for x in
index
,1
将正确循环值2
,3
,myobject.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)