はじめに
Python で、変数に代入する値として 4 ** 3 と書いたつもりが誤って 4 *+ 3 とタイプミスしてしまいました。4 *+ 3 は一見するとエラーになりそうですが、実はエラーにはなりません。では、この式はどのような値として評価されるのでしょうか。
計算結果とその理由
次のプログラムを実行してみましょう。
result: int = 4 *+ 3
print(result)
結果は次の通りになります。
12
えっ、12......?なぜこうなるのでしょうか?
実は次のコードと同じ計算が行われています。
result: int = 4 * (+3)
print(result)
Python の 公式ドキュメント の「演算子の優先順位」を参照してみると単項演算子である + は二項演算子である * よりも優先順位が高いことが分かります。そのため、4 *+ 3 は 4 * (+3) と解釈され、結果として 12 になります。それでは、4 +* 3 の場合にどうなるかも、読者の皆さんはもうお分かりではないでしょうか。
次のプログラムを実行してみましょう。
result: int = 4 +* 3
print(result)
結果は次の通りになります。
SyntaxError: invalid syntax
構文エラーになりました。4 +* 3 の場合、* を単項演算子として解釈することはできず、(+4) * 3 のように解釈されることもないため、構文エラーになります。
最後に
元々は単なるタイプミスだったため、そのまま修正すればよい話ではありますが、修正しなくてもエラーにはならなかったことが気になり調べてみました。その結果 + が二項演算子ではなく単項演算子として解釈されているためだと分かりました。このように、気になったことをとことん調べていくと面白い発見があるかもしれません。