このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】演算子の優先順位

演算子の優先順位

 Pythonプログラミングにおいて、演算子の優先順位は式を正しく評価するために非常に重要な概念です。演算子の優先順位を理解することで、複雑な数式を正確に解釈し、意図した通りに計算を行うことができます。ここでは、Pythonにおける演算子の優先順位と結合性について詳しく解説し、具体的な例を通じてその理解を深めます。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.演算子の優先順位とは

 演算子の優先順位とは、複数の演算子が同じ式内で使用される場合に、どの演算子を先に評価するかを決定するルールのことです。これにより、式全体の評価順序が定まります。優先順位を正しく理解することで、コードの意図を明確に伝え、バグの発生を防ぐことができます。

ポイント

  • 演算子の優先順位を覚えることで、複雑な式を正確に評価できる。
  • 優先順位がわからない場合は、括弧()を使用して明示的に評価順序を指定することが推奨される。

2.演算子の優先順位一覧

 以下の表は、Pythonにおける主要な演算子の優先順位を高い順にまとめたものです。左から右に向かって優先順位が高くなります。

優先順位演算子機能
1(), [], {}括弧式、リスト、辞書、集合
2x[...], x[...:...], x(...), x.インデックス、スライス、関数呼び出し、属性参照
3**べき乗
4~, +, -ビット単位のNOT(否定)、正符号、負符号
5*, /, //, %, @乗算、除算、整数除算、剰余、行列積
6+, -加算、減算
7<<, >>左シフト、右シフト
8&ビット単位のAND(論理積)
9^ビット単位のXOR(排他的論理和)
10|ビット単位のOR(論理和)
11in, not in, is, is not, <, <=, >, >=, !=, ==所属検査(メンバーシップテスト)、同一性テスト、比較
12notブール演算のNOT(否定)
13andブール演算のAND(論理積)
14orブール演算のOR(論理和)
15if ... else条件式(三項演算子)
16lambdaラムダ式
17:=代入式

注意事項

  • 高優先順位の演算子は、式内で他の演算子よりも先に評価されます。
  • 低優先順位の演算子は、式内で他の演算子よりも後に評価されます。
  • 同じ優先順位の演算子が複数存在する場合は、結合性(左結合または右結合)に従って評価されます。

3.結合性(Associativity)

 結合性とは、同じ優先順位を持つ複数の演算子が隣接している場合に、どちらの演算子を先に評価するかを決定するルールです。結合性には主に左結合右結合の2種類があります。

結合性説明評価順序
左結合左側の演算子から順に評価する。2 - 3 - 4(2 - 3) - 4左から右へ
右結合右側の演算子から順に評価する。2 ** 3 ** 22 ** (3 ** 2)右から左へ

ポイント

  • 多くの演算子は左結合であるため、左から順に評価されます。
  • **(べき乗)演算子のみが右結合であり、右から順に評価されます。

4.演算子優先順位と結合性の具体例

4.1. 算術演算子の優先順位

サンプルプログラム

# 加算と乗算の優先順位
result1 = 2 + 3 * 4
print(result1)  # 出力: 14
# 解説: 3 * 4 が先に評価され、結果は 2 + 12 = 14

# 括弧を使用して優先順位を変更
result2 = (2 + 3) * 4
print(result2)  # 出力: 20
# 解説: 括弧内の 2 + 3 が先に評価され、結果は 5 * 4 = 20

実行結果

14
20

4.2. 結合性の例

サンプルプログラム

# 左結合の例
result3 = 10 - 3 - 2
print(result3)  # 出力: 5
# 解説: (10 - 3) - 2 = 7 - 2 = 5

# 右結合の例
result4 = 2 ** 3 ** 2
print(result4)  # 出力: 512
# 解説: 3 ** 2 が先に評価され、結果は 2 ** 9 = 512

実行結果

5
512

4.3. 複雑な式の評価

サンプルプログラム

import math

# 複雑な式の例
value = 3 + 4 * 2 / (1 - 5) ** 2 ** 3
print(value)  # 出力: 3.0001220703125
# 解説:
# (1 - 5) = -4
# 2 ** 3 = 8
# (-4) ** 8 = 65536
# 4 * 2 = 8
# 8 / 65536 = 0.0001220703125
# 3 + 0.0001220703125 = 3.0001220703125

実行結果

3.0001220703125

まとめ

ここでは、Pythonにおける演算子の優先順位結合性について学びました。

  • 演算子の優先順位:式内で複数の演算子が使用される場合、どの演算子が先に評価されるかを決定するルール。
  • 結合性:同じ優先順位の演算子が複数存在する場合に、どの方向から評価を行うかを決定するルール。主に左結合と右結合がある。
  • 具体例:優先順位と結合性を理解するための具体的なコード例を通じて、演算子の評価順序を確認。

 これらの知識を基に、Pythonプログラム内で複雑な数式を正確に評価し、意図した通りに計算を行うことができるようになります。演算子の優先順位に自信がない場合は、括弧を使用して評価順序を明示的に指定することで、コードの可読性と正確性を向上させることができます。次のコンテンツでは、塁算代入文について詳しく解説していきます。ぜひ、実際にコードを書きながら、演算子の優先順位を体験して理解を深めてください。