4

Python は、数値の乗算を行うと思われる場所で文字列の乗算を行っていますが、その理由はわかりません。

>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8

型を整数に強制しても何もしません。(私はこれが冗長であることを理解していますが、それは私にとってばかチェックです:

 >>> print('%d' % int(2) * int(4))
 2222

明らかに私は問題を解決しました (括弧を追加すると解決します) が、ここで何が起こっているのでしょうか? これが覚えておかなければならない単なる癖であれば、それで問題ありませんが、この背後にあるロジックを理解したいと思います。

4

2 に答える 2

12

演算子の優先順位が発生しています。

Python%では と同じ優先順位が*あるため、左から右にグループ化されます。

そう、

print('%d' % 2 * 4)

と同じです。

print( ('%d' % 2) * 4)

Python演算子の優先順位表は次のとおりです。

演算子の優先順位のルールを覚えるのは難しく、ルールが微妙な場合があるため、式で複数の演算子を連鎖させる場合は、単純に明示的な括弧を使用するのが最善の方法です。

于 2009-08-21T02:02:41.503 に答える
2

ああ、私はそれを理解したと思います。もちろん、メッセージを投稿した直後です。それは操作の順序です。文字列の書式設定が計算され、結果の文字列が最後のオペランドに対して文字列乗算されます。

入力すると:

>>> print '%d' % 2 * 4
2222

このように優先順位を指定したかのようになります。

>>> print ('%d' % 2) * 4
2222
于 2009-08-21T01:57:54.397 に答える