运算符优先级与复数

时间:2013-04-19 10:36:43

标签: python cmath

这应该是不言自明的

>>> (1+2j).real  #Normal Usage
1.0
>>> (1+2j).imag  #Normal Usage
2.0
>>> 1+2j.real  #Normal Usage
1.0
>>> 1+2j.imag  #Flips Out
3.0
>>> 123+657j.real
123.0
>>> 123+657j.imag
780.0

z.imag以某种方式将实部和虚部加起来 我发现这很有趣..这是一个错误还是这是一个故意的功能?

3 个答案:

答案 0 :(得分:6)

问题是1+2j.imag被解析为1+(2j.imag)。显然,2j.imag2.0,因此1+2j会返回3.0。执行1+2j.real后,Python会添加12j.real2j.real0.0,因此您会得到正确答案1.0作为回报。

如果您将复数括号括起来,就像在前两个示例中一样,您将获得预期的结果。

答案 1 :(得分:3)

这是运营商优先问题。 .的优先级高于+,因此您实际上正在执行

1+(2j.imag)

当然是3。<​​/ p>

始终将复数数字文字括起来是一个非常好的想法。

答案 2 :(得分:2)

真的没有疯狂。这是发生的事情:'。'运算符优先于+,就是全部。这意味着

>>> 1+2j.imag

被评估为1 +(2j.imag),即1 + 2,即3。同样适用于其他例子。