Python 運算子優先級
大家好,有志於成為 Python 程式設計師的你!今天,我們將深入探討一個一開始可能會讓人感到有些畏懼的主題,但我保證一旦我們把它分解,你會發現它非常吸引人。我們要談論的是 Python 運算子優先級。把它想像成 Python 中操作 的"排隊順序"。讓我們一起踏上這段激動人心的旅程!
什麼是運算子優先級?
在我們深入 Python 的具體細節之前,先來了解一下運算子優先級的一般含義。想像一下你在一個忙碌的廚房裡(跟著我想像,我保證這個類比會有意義)。在這個廚房裡,不同的廚師負責不同的任務。有些人在切菜,有些人在煎炒,還有些人在装盘。現在,這些任務需要按照特定的順序進行,才能創造出完美的菜餚。這個順序與程式設計中的運算子優先級類似。
在 Python 中,當你寫一個包含多個運算子的表達式時,運算子優先級決定了這些操作執行的順序。就像在我們的廚房類比中,有些操作優先於其他操作。
讓我們看一個簡單的例子:
result = 5 + 3 * 2
print(result)
你想結果會是什麼?如果你猜是 11,那麼你答對了!但是為什麼?
這就是運算子優先級發揮作用的地方。在 Python(和大多數程式設計語言)中,乘法具有高於加法的優先級。所以,表達式被評估為:
- 首先,3 * 2 計算出來是 6
- 然後,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)
讓我們一步步來分解:
- 3 ** 2 = 9(指數具有最高的優先級)
- 5 * 2 = 10(乘法接著)
- 10 + 10 - 9 = 11(加法和減法從左到右執行)
所以,最終的結果是 11。
示例 2:比較和邏輯運算子
x = 5
y = 10
z = 15
result = x < y and y < z or x == z
print(result)
這是它的評估方式:
- x < y 是 True
- y < z 是 True
- x == z 是 False
- True and True 是 True
- 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)
讓我們來分解它:
- b ** 2 = 9(指數第一)
- a * 9 = 18(乘法接著)
- 18 + c = 22(加法)
- (a + b) = 5(括號具有最高優先級)
- 5 * c = 20(乘法)
- 22 > 20 是 True(比較)
- a == b 是 False(等式檢查)
- not False 是 True(邏輯NOT)
- True and True 是 True(邏輯AND)
最終的結果是 True。
結論
理解運算子優先級對於编写正確且有效的 Python 代碼至關重要。它幫助你預測你的表達式將如何被評估,並避免意外的結果。記住,當你感到不確定時,使用括號來明確定義操作的順序。這不僅可以確保你的代碼按照你的意圖工作,而且還使它對其他人(以及未來的你)更易於閱讀!
隨著你繼續 Python 的旅程,你會對這些優先級規則變得更熟悉。如果一開始覺得有壓力,沒關係 - 經過練習,它會變得 second nature。繼續編程,繼續實驗,最重要的是,玩得開心!畢竟,編程就像做菜一樣 – 練習得越多,你的"菜餚"就越出色。開心編程,未來的 Python 廚師们!
Credits: Image by storyset