演算子の優先順位

広告
eyecatch

Python では複数の種類の演算子を利用することができますが、 1 つの文の中で複数の演算子が使用されている場合、演算子ごとに決まっている優先順位の高いものから評価されていきます。ここでは演算子の優先順位について解説します。

演算子の優先順位の一覧

Python で定義されている演算子の優先順位は次のようになっています。上から順に優先順位が高くなっています。

演算子説明
(expressions...), [expressions...], {key: value...}, {expressions...}式結合またはタプル表示、リスト表示、辞書表示、集合表示
x[index], x[index:index], x(arguments...), x.attribute添字指定、スライス操作、呼び出し、属性参照
await xAwait 式
**べき乗
+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

括弧の中に複数の演算子が使われている場合は演算子の優先順位によって演算が行われます。また括弧が多重に使用されている場合は内側の括弧が先に演算されます。

サンプルプログラム

簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample3-1.py という名前で保存します。

print("5 + 3 * 4 = " + str(5 + 3 * 4))
print("(5 + 3) * 4 = " + str((5 + 3) * 4))

括弧()を使った優先順位の変更(1)

その後で、次のように実行してください。

python sample3-1.py

括弧()を使った優先順位の変更(2)

括弧を使用することで、演算子の優先順位とは違った順序で演算を行わせることができました。

-- --

Python で使用される演算子の優先順位について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。