为什么Python REPL中以下操作的结果总是为0? (得到与C和Javascript相同的结果)
>>> a = 0
>>> a *= 1 + 1
>>> a
0
在上述情况下,乘法赋值是否应该等于a = a * 1 + 1?
>>> a = 0
>>> a = a * 1 + 1
>>> a
1
答案 0 :(得分:3)
因为
a *= 1 + 1
与
相同a = a *(1 + 1)
因为a为0,结果仍为0
答案 1 :(得分:0)
根据spec,首先评估表达式
让rref成为评估AssignmentExpression的结果。
- 醇>
设r是将op应用于lval和rval的结果,就像评估表达式lval op rval 一样。
因此,在应用操作和赋值之前,首先评估右侧的表达式。
var a = 2;
a *= 0 + 2;
console.log( "multiplication " + a ); //4 since 2*(0+2) is 4
a = 1;
a /= 0 + 2;
console.log( "division " + a ); //0.5 since 1/(0+2) is 0.5