2009-08-21 15 views
4

Pythonは数値の乗算を期待しているところで文字列の乗算を行っていますが、その理由はわかりません。Pythonの文字列の書式化と文字列の乗法の奇妙

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

整数型に強制しても何もしません。 (私はこれが冗長で実現し、それは私のために馬鹿チェックです:?私はここで何が起こっているか(括弧を追加すると、それをしない)私の問題を解決しましたが、明らかに

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

これは私が持っているだけで気まぐれであれば

覚えていますが、これの背後にあるロジックを理解したいと思います。

答えて

12

あなたは演算子の優先順位を経験しています。

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

ので、

print('%d' % 2 * 4) 

はここ

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

のpython operator precedence tableである、と同じです。

演算子の優先順位の規則を覚えにくく、規則が微妙な場合があるため、複数の演算子を式で連結するときには、明示的な括弧を使用するのが最善の方法です。

+0

私自身の答えを受け入れるのは上品ではないので、Karlは最も簡潔で正しい答えのチェックを受け取ります。 – Schof

+0

"彼らは左から右へグループ化する"ので、演算子の "*"、 "%"グループには左連想があるからです。右から左の "**"グループ – newacct

+0

"オペレータの優先順位があります。"それは医者のための何かを見ることですか? – balpha

2

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

入力するとき:

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

それは私が優先さをこのように指定されていたかのようであることが判明:

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