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

dev*_*ium 3 python

以下行似乎不起作用:

(count, total) += self._GetNumberOfNonZeroActions((state[0] + x, state[1] - ring, state[2]))
Run Code Online (Sandbox Code Playgroud)

我想在这种情况下不可能使用+ =运算符.我想知道为什么?

编辑:实际上我想要的是添加到变量count和由该函数返回的元组给出的总值.现在我想起来,允许(a,b)+ =(1,2)没有意义,因为它会创建一个新的元组,对吧?

换句话说,有没有办法简化这个?

    res = self._GetNumberOfNonZeroActions((state[0] + x, state[1] + ring, state[2]))
    count, total = res[0], res[1]
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 10

你的观察是正确的:a += b因为任何a和b都意味着相同a = a + b(除了它可以保存一个a的评估).所以,如果a是一个元组,那么唯一可以做到+=的就是另一个元组; 如果a是一个临时的未命名元组,那+=当然是不可观察的 - Python通过捕获特殊情况作为语法错误来帮助你.在你+ =之前,你需要给元组一个名字(或其他可重新指定的引用)......:

>>> thetup = (a, b)
>>> thetup += (1, 2)
>>> thetup
(23, 45, 1, 2)
Run Code Online (Sandbox Code Playgroud)

如果语法(a, b) += (1, 2)被接受了,它当然必须暗示相同的功能......但是没有任何可能的可观察的方法来检查附加实际上是否已经发生,这实际上几乎毫无意义.不接受语法的好事,因此! - )


And*_*are 5

您将两个概念混合在一起.Python支持元组解包,允许您在一行中分配更多的一个变量.

+=运营商得到的解释扩大,因为它仅仅是一个速记.您的example((a, b) += (1, 2))将扩展为:

(a, b) = (a, b) + (1, 2)
Run Code Online (Sandbox Code Playgroud)

当你看到它时,它并没有多大意义.请记住,元组解包仅适用于为变量赋值.