以下行似乎不起作用:
(count, total) += self._GetNumberOfNonZeroActions((state[0] + x, state[1] - ring, state[2]))
我想在这种情况下不可能使用+ =运算符。我想知道为什么?
编辑:实际上我想要的是添加到变量count和由该函数返回的元组给出的总值。现在我想起来,允许(a,b)+ =(1,2)没有意义,因为它会创建一个新的元组,对吗?
换句话说,有没有办法简化这个?
res = self._GetNumberOfNonZeroActions((state[0] + x, state[1] + ring, state[2]))
count, total = res[0], res[1]
答案 0 :(得分:10)
您的观察是正确的:a += b
对于任何a和b意味着与a = a + b
相同(除了它可以保存一个a的评估)。因此,如果a
是一个元组,那么唯一可以+=
为它的是另一个元组;如果a
是一个临时未命名的元组,那么+=
当然是不可观察的 - Python会通过将这种特殊情况作为语法错误来帮助你。在你+ =之前你需要给元组一个名字(或其他可重新指定的引用)......:
>>> thetup = (a, b)
>>> thetup += (1, 2)
>>> thetup
(23, 45, 1, 2)
如果语法(a, b) += (1, 2)
被接受,它当然必须暗示相同的功能......但没有任何可能的可观察的方法来检查附加实际上是否发生过,这实际上几乎没有意义。因此,语法不被接受是好事! - )
答案 1 :(得分:5)
您将两个概念混合在一起。 Python支持tuple unpacking,允许您在一行中分配多一个变量。
+=
运算符由解释器扩展,因为它只是一个简写。您的示例((a, b) += (1, 2)
)将扩展为:
(a, b) = (a, b) + (1, 2)
当你看到它时,它并没有多大意义。请记住,元组解包只适用于为变量赋值。
答案 2 :(得分:1)
如果您想使用数字数组,我建议使用numpy http://numpy.scipy.org/。
它允许你这样做:
>>> from numpy import *
>>> count_total = array((0,0))
>>> count_total += (1,2)
>>> count_total
array([1, 2])