这应该是不言自明的
>>> (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
以某种方式将实部和虚部相加。
我发现这很有趣..这是一个错误还是一个故意的功能?
问题是1+2j.imag
被解析为1+(2j.imag)
. 显然2j.imag
是2.0
,所以1+2j
回报3.0
。当你这样做时1+2j.real
,Python 会添加1
和2j.real
. 2j.real
是0.0
,所以你得到正确的答案1.0
作为回报。
如果您将复数括起来,就像在前两个示例中一样,您将获得预期的结果。
这是运算符优先级问题。.
具有比 更高的优先级+
,因此您正在有效地做
1+(2j.imag)
当然是3。
总是给复数文字加上括号是一个非常好的主意。
那里没有疯狂,真的。这就是发生的事情:'.' 运算符优先于 +,仅此而已。这意味着
>>> 1+2j.imag
被评估为 1 + (2j.imag),即 1 + 2,即 3。这同样适用于其他示例。