Python演算子優先順位

こんにちは、Pythonプログラマー志望の皆さん!今日は、最初は少し威圧感があるかもしれないが、その内容を解説すると興味深いトピックについて潜入していきます。それは、Pythonの演算子優先順位です。それをPythonの「啄食順序」と考えてみてください。この興味深い旅に一緒に出発しましょう!

Python - Operator Precedence

演算子優先順位とは?

Pythonに特化する前に、まず一般論として演算子優先順位が何を意味するか理解しましょう。忙しい厨房でのアナロジーを考えてみてください(ここで离れないでください、この比喩は後で意味を持つという保証です)。この厨房では、異なるシェフが異なるタスクを担当しています。ある人が野菜を切り、別の人がフライ、もう別の人が盛り付けています。これらのタスクは、完璧な料理を作るために特定の順序で行われなければなりません。この順序は、プログラミングの演算子優先順位と類似しています。

Pythonでは、複数の演算子を持つ式を書く際、演算子優先順位がこれらの操作がどのように順序どおりに行われるかを決定します。厨房のアナロジーと同様に、いくつかの操作は他の操作よりも優先されます。

簡単な例を見てみましょう:

result = 5 + 3 * 2
print(result)

出力は何だと思いますか?11と答えたら正解です!でも、なぜでしょう?

ここに演算子優先順位が登場します。Python(そしてほとんどのプログラミング言語)では、掛け算が足し算よりも優先されます。したがって、式は以下のように評価されます:

  1. まず、3 * 2が計算され、6になります
  2. 次に、5が6に加わり、11になります

この順序を変更したければ、以下のように括弧を使います:

result = (5 + 3) * 2
print(result)

今や出力は16になります。なぜなら、括弧が最も優先され、掛け算よりも先に足し算が行われるからです。

Python演算子優先順位表

コンセプトを理解したので、Pythonの全ての演算子優先順位を見ていきましょう。上にある演算子は、下にある演算子よりも優先されることを覚えておいてください。

優先順位 演算子 説明
1 () 括弧
2 ** 乗方
3 +x, -x, ~x 単項プラス、マイナス、ビットごとのNOT
4 *, /, //, % 掛け算、割り算、床関数、余り
5 +, - 足し算、引き算
6 <<, >> ビットシフト演算子
7 & ビットごとのAND
8 ^ ビットごとのXOR
9 | ビットごとのOR
10 ==, !=, >, >=, <, <=, is, is not, in, not in 比較、同一性、メンバーシップ演算子
11 not 論理NOT
12 and 論理AND
13 or 論理OR

これらの演算子のいくつかが見覚えのないかもしれませんが、今は最も一般的なものに焦点を当てましょう。

Python演算子優先順位例

この優先順位表が実際のプログラムでどのように働くかを見るために、いくつかの例を見ていきましょう。

例1: 算術演算子

result = 10 + 5 * 2 - 3 ** 2
print(result)

これをステップバイステップに分解してみましょう:

  1. 3 ** 2 = 9 (乗方が最も優先される)
  2. 5 * 2 = 10 (次に掛け算)
  3. 10 + 10 - 9 = 11 (足し算と引き算は左から右に評価される)

したがって、最終的な結果は11です。

例2: 比較および論理演算子

x = 5
y = 10
z = 15

result = x < y and y < z or x == z
print(result)

これがどのように評価されるかを見てみましょう:

  1. x < y は True
  2. y < z は True
  3. x == z は False
  4. True and True は True
  5. True or False は True

したがって、最終的な結果は True です。

例3: 異なるタイプの演算子の混合

a = 2
b = 3
c = 4

result = a * b ** 2 + c > (a + b) * c and not a == b
print(result)

これを分解してみましょう:

  1. b ** 2 = 9 (まず乗方)
  2. a * 9 = 18 (次に掛け算)
  3. 18 + c = 22 (次に足し算)
  4. (a + b) = 5 (括弧が最も優先される)
  5. 5 * c = 20 (掛け算)
  6. 22 > 20 は True (比較)
  7. a == b は False (等価性チェック)
  8. not False は True (論理NOT)
  9. True and True は True (論理AND)

最終的な結果は True です。

結論

演算子優先順位を理解することは、正確で効率的なPythonコードを書くために不可欠です。それは、式がどのように評価されるかを予測し、予期せぬ結果を回避するのに役立ちます。疑わしいときは、括弧を使って操作の順序を明示的に定義することを覚えておいてください。それはコードが意図したように動作することを確実にし、他の人や将来的な自分にとっても読みやすくします。

Pythonの旅を続ける中で、これらの優先順位のルールには慣れていきます。最初は重荷と感じるかもしれませんが、練習すれば自然になります。コーディングを続け、実験を続け、最も重要なのは楽しむことです。毕竟、プログラミングは調理と同じで、練習すれば「料理」がより良くなります。コーディングを楽しんで、未来のPythonシェフたち!

Credits: Image by storyset