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.realです0.0ので、正しい答えが得られます1.0

最初の 2 つの例のように、複素数を括弧で囲むと、期待どおりの結果が得られます。

于 2013-04-19T10:38:36.523 に答える
3

これは演算子の優先順位の問題です。.よりも優先順位が高い+ため、効果的に実行しています

1+(2j.imag)

もちろん3です。

複素数リテラルを常に括弧で囲むことは、Very Good Idea™ です。

于 2013-04-19T10:39:47.630 に答える
2

そこに狂気はありません、本当に。何が起こるかは次のとおりです。演算子は + よりも優先されます。それだけです。つまり

>>> 1+2j.imag

は 1 + (2j.imag) として評価されます。これは 1 + 2 であり、3 です。他の例についても同様です。

于 2013-04-19T10:39:30.043 に答える