演算子の優先順位
Python では複数の種類の演算子を利用することができますが、 1 つの文の中で複数の演算子が使用されている場合、演算子ごとに決まっている優先順位の高いものから評価されていきます。ここでは演算子の優先順位について解説します。
(Last modified: )
演算子の優先順位の一覧
Python で定義されている演算子の優先順位は次のようになっています。上から順に優先順位が高くなっています。
演算子 | 説明 |
---|---|
(expressions...), [expressions...], {key: value...}, {expressions...} | 式結合またはタプル表示、リスト表示、辞書表示、集合表示 |
x[index], x[index:index], x(arguments...), x.attribute | 添字指定、スライス操作、呼び出し、属性参照 |
await x | Await 式 |
** | べき乗 |
+x, -x, ~x | 正数、負数、ビット単位 NOT |
*, @, /, //, % | 乗算、行列乗算、除算、切り捨て除算、剰余 |
+, - | 加算および減算 |
<<, >> | シフト演算 |
& | ビット単位 AND |
^ | ビット単位 XOR |
| | ビット単位 OR |
in, not in, is, is not, <, <=, >, >=, !=, == | 所属や同一性のテストを含む比較 |
not x | ブール演算 NOT |
and | ブール演算 AND |
or | ブール演算 OR |
if -- else | 条件式 |
lambda | ラムダ式 |
例えば同じ四則演算の演算子であっても、乗算や除算の演算子である * や / は、加算や現在の演算子である + や - よりも優先順がい高いです。また同じ位置にある演算子は優先順位に差はありません。乗算と除算の演算子である * と / は同じ位置にあるので優先順位は同じです。
演算が実行される順序
演算子の優先順位が異なる演算子が複数含まれていた場合、優先順位が高い演算から先に行われます。次の計算式をみてください。
num = 5 + 3 * 4
加算の演算子 + と乗算の演算子 * では * の方が優先順位が高いため先に 3 * 4 の演算が行われます。よって次のような順番で演算が行われていきます。
num = 5 + 3 * 4
num = 5 + 12
num = 17
次に演算子の優先順位が同じ場合、左から右へ演算が行われます(べき乗を除く)。次の計算式をみてください。
num = 8 / 2 * 4
除算の演算子 / と乗算の演算子 * では優先順が同じなので左から右へ次のような順番で演算が行われていきます。
num = 8 / 2 * 4
num = 4 * 4
num = 16
複数の演算子が含まれている式ではこの 2 つのルールに従って演算が行われます。必要に応じて次に解説する括弧を使った優先順位の変更を行ってください。
括弧()を使った優先順位の変更
演算子の優先順位とは異なる順序で演算を行いたい場合には括弧()を使用します。括弧で囲まれた演算は先に演算が行われます。次の計算式をみてください。
num1 = 5 + 3 * 4
num2 = (5 + 3) * 4
乗算の演算子である * の方が加算の演算子である + よりも優先順位が高いので、最初の計算式ではまず 3 * 4 が演算されます。
num1 = 5 + 3 * 4
num = 5 + 12
num = 17
それに対して二番目の計算式のように括弧が使用されている場合は括弧の中の演算が最初に行われます。その為まず 5 + 3 が演算されることになります。
num2 = (5 + 3) * 4
num = 8 * 4
num = 32
括弧の中に複数の演算子が使われている場合は演算子の優先順位によって演算が行われます。また括弧が多重に使用されている場合は内側の括弧が先に演算されます。
次のサンプルを見てください。
print("5 + 3 * 4 = " + str(5 + 3 * 4)) >> 5 + 3 * 4 = 17 print("(5 + 3) * 4 = " + str((5 + 3) * 4)) >> (5 + 3) * 4 = 32
括弧を使用することで、演算子の優先順位とは違った順序で演算を行わせることができました。
-- --
Python で使用される演算子の優先順位について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。