1

这应该是不言自明的

>>> (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以某种方式将实部和虚部相加。
我发现这很有趣..这是一个错误还是一个故意的功能?

4

3 回答 3

6

问题是1+2j.imag被解析为1+(2j.imag). 显然2j.imag2.0,所以1+2j回报3.0。当你这样做时1+2j.real,Python 会添加12j.real. 2j.real0.0,所以你得到正确的答案1.0作为回报。

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

于 2013-04-19T10:38:36.523 回答
3

这是运算符优先级问题。.具有比 更高的优先级+,因此您正在有效地做

1+(2j.imag)

当然是3。

总是给复数文字加上括号是一个非常好的主意。

于 2013-04-19T10:39:47.630 回答
2

那里没有疯狂,真的。这就是发生的事情:'.' 运算符优先于 +,仅此而已。这意味着

>>> 1+2j.imag

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

于 2013-04-19T10:39:30.043 回答