評価の仕組みを学ぼう!
評価の仕組み
今回は評価の仕組みを学んでいきましょう。評価とは、Pythonが式に従って計算を処理することを指します。今回は優先順位と結合規則についてです。特に難しいことはなく、数学や算数の演算規則とほとんどは同じになります。
優先順位の原則
式に複数の演算子が存在する場合は、Pythonにより定められた優先順位に従って、優先どの高いものから評価されます。以前にも紹介しましたが、Pythonには多くの演算子があります。それらには17段階の優先順位が定められています。例えば、「1 + 2 * 3」という式があった場合、+演算子は7番目に優先のグループ、*演算子は6番目に優先のグループなので、*の計算が先に行われます。簡単な例を見ましょう。
>>> 1 + 2 * 3 7 >>> (1 + 2) * 3 9 >>> 2 * 3**2 18
上記の結果を見て分かるように、数学の計算規則と同じです。他に論理演算もありますが、それは条件文のところで説明したいと思います。以下に演算子の優先順位を表にしてまとめておきます。しかし、これを覚える必要は全くありません。使っているうちに覚えれば問題ないです。他の言語を知っている日地向けの注意ですが、Pythonにはインクリメントやデクリメントはありません。
下の表は、Pythonの公式ドキュメントを参考に作っています。同じグループに属する演算子の優先順位は同じです。同じ優先順位の演算子は左から順に処理されていきます。
Python公式ドキュメント
演算子 | 説明 |
---|---|
[ value, ... ], { value, ... }, { key:value, ... }, ( ... ) | タプル、リスト、辞書、集合の表示または()で囲まれた式 |
a[index], a[index:inde ], a(arguments...), a.attribute | 添字、スライス、関数呼び出し、属性参照 |
await x | Await式 |
** | 冪乗 |
+x, -x, ~x | 正数、負数、ビット単位のNOT |
*, @, , /, //, % | 掛け算、行列の掛け算、floatの除算、整数の除算、剰余 |
+, - | 加算、減算 |
<<, >> | 左シフト、右シフト |
& | ビット単位の AND |
^ | ビット単位のXOR |
| | ビット単位のOR |
in, not, in, is, is not, <, <=, >, >=, !=, == | 帰属や同一性のテストを含む比較 |
not x | 論理のNOT |
and | 論理のAND |
or | 論理のOR |
if ... else | 条件式 |
lambda | ラムダ式 |
結合規則
演算子にはそれぞれ結合規則がありますが、Pythonは代入演算子以外は、左から右へと処理されていきます。なので、特に紛らわしいことはないので、説明することもありません。演算子の優先順位や結合規則に迷った時は、最も優先度の高い"()"を用いることにより大概の問題は解決します。
最後に
お疲れ様でした。今回は式の評価というとても単純なことであまりおもしろくなかったかもしれません。