Python内联扩充多变量

Python内联扩充多变量,python,operators,Python,Operators,为什么这样做有效 >> x, y = (1, 2) >> print x, y 1 2 但是扩充会导致语法错误 >> x, y -= (1, 2) SyntaxError: illegal expression for augmented assignment 有没有别的办法,我期待着: >> x, y -= (1, 2) >> print x, y 0 0 不能在多个目标上使用扩充赋值语句,否 引述: 除了在一条语句中分配给元组

为什么这样做有效

>> x, y = (1, 2)
>> print x, y
1 2
但是扩充会导致语法错误

>> x, y -= (1, 2)
SyntaxError: illegal expression for augmented assignment
有没有别的办法,我期待着:

>> x, y -= (1, 2)
>> print x, y
0 0

不能在多个目标上使用扩充赋值语句,否

引述:

除了在一条语句中分配给元组和多个目标之外,由增广赋值语句完成的赋值与普通赋值的处理方式相同。类似地,除了可能的就地行为外,通过增广赋值执行的二进制操作与普通二进制操作相同

我的

就地增广赋值从
target-=expression
转换为
target=target.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

在引擎盖下,增广赋值是二进制运算符(
+
*
-
,等等)的专业化,而不是赋值的。由于实现是基于这些运算符的,而二进制运算符只有两个操作数,因此原始实现中从未包含多个目标

您只需单独应用作业:

x -= 1
y -= 2
或者,如果您真的真的想变得复杂,请使用
操作符
模块和
zip()
operator.isub
应用于组合(通过
itertools.starmap()
,然后使用元组分配:

from operator import sub
from itertools import starmap

x, y = starmap(operator.isub, zip((x, y), (1, 2)))
其中,
isub
将确保调用右钩子,从而允许对支持它的可变类型进行就地减法

或者,如果要处理不支持就地处理的类型,则使用生成器表达式即可:

x, y = (val - delta for val, delta in zip((x, y), (1, 2)))
这个
x,y=(1,2)
是序列赋值。它依赖于右侧是一个iterable对象,左侧由与迭代左侧提供的相同数量的变量组成


x,y-=(1,2)
试图调用左手操作数上的方法
\uuu isub\uuu
。就地(“增广”)的性质赋值是指它必须在其左侧接受一个变量,该变量的值接收运算符调用,然后该变量接收该调用的结果。Python不允许在多个目标上分配就地赋值。

解决方案中未涉及的内容,适用于偶然发现此问题的人:您可以执行以下操作:使用numpy数组所需的数学类型。