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 的旅程,你會對這些優先級規則變得更熟悉。如果一開始覺得有壓力,沒關係 - 經過練習,它會變得 second nature。繼續編程,繼續實驗,最重要的是,玩得開心!畢竟,編程就像做菜一樣 – 練習得越多,你的"菜餚"就越出色。開心編程,未來的 Python 廚師们!

Credits: Image by storyset