在python中不可能做(a,b)+ =(1,2)?

时间:2009-12-09 05:32:11

标签: python

以下行似乎不起作用:

(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]

3 个答案:

答案 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])