⚖️Python 中的算式(或稱為運算式,Expression)~邱允文

 ⚖️Python 中運算式 Expression

Python 中的表達式(Expressions)

在 Python 中,表達式是代碼中可以被求值(計算)為一個值的任何部分。表達式可以包含變數、操作符、函數調用等,並最終產生一個值。

基礎表達式類型

1. 算術表達式

python
# 基本算術運算
5 + 3           # 加法,結果:8
10 - 4          # 減法,結果:6
7 * 2           # 乘法,結果:14
15 / 3          # 除法,結果:5.0
20 // 6         # 整數除法,結果:3
9 % 2           # 取餘數,結果:1
2 ** 3          # 指數,結果:8

# 複合表達式
(5 + 3) * 2     # 使用括號改變優先級,結果:16

2. 比較表達式

python
# 比較操作符
a == b          # 等於
a != b          # 不等於
a < b           # 小於
a > b           # 大於
a <= b          # 小於等於
a >= b          # 大於等於

# 範例
10 > 5          # True
3 == 3.0        # True
4 != 4          # False

3. 邏輯表達式

python
# 布林運算
True and False  # 邏輯且,結果:False
True or False   # 邏輯或,結果:True
not True        # 邏輯非,結果:False

# 複雜邏輯表達式
(age > 18) and (has_license)  # 兩個條件都為真時為真
(score > 90) or (attendance > 0.8)  # 任一個條件為真時為真

4. 賦值表達式(Python 3.8+)

python
# 海象運算符 :=
# 在表達式中進行賦值
if (n := len(items)) > 10:
    print(f"項目數量過多:{n}")

# 傳統寫法需要兩行
n = len(items)
if n > 10:
    print(f"項目數量過多:{n}")

表達式的特性

優先級順序

Python 表達式的求值遵循特定的優先級順序:

python
# 優先級從高到低:
# 1. 括號 ()
# 2. 指數 **
# 3. 一元操作符 +x, -x
# 4. 乘除 *, /, //, %
# 5. 加減 +, -
# 6. 比較操作符
# 7. 邏輯 not
# 8. 邏輯 and
# 9. 邏輯 or

2 + 3 * 4       # 結果:14 (先乘後加)
(2 + 3) * 4     # 結果:20 (括號優先)

鏈式比較

Python 支持鏈式比較表達式:

python
# 傳統寫法
x = 5
if x > 3 and x < 10:
    print("x 在 3 和 10 之間")

# Python 鏈式比較
if 3 < x < 10:
    print("x 在 3 和 10 之間")

# 支持多個比較
if 1 < x < 5 < y < 10:
    print("鏈式比較")

條件表達式(三元運算符)

python
# 語法:value_if_true if condition else value_if_false
age = 20
status = "成年人" if age >= 18 else "未成年人"

# 等效於傳統 if-else
if age >= 18:
    status = "成年人"
else:
    status = "未成年人"

進階表達式類型

5. 序列操作表達式

python
# 字符串連接
"Hello" + " " + "World"  # 結果:"Hello World"

# 列表組合
[1, 2] + [3, 4]          # 結果:[1, 2, 3, 4]

# 重複運算符
"Python" * 3            # 結果:"PythonPythonPython"
[0] * 5                 # 結果:[0, 0, 0, 0, 0]

# 成員測試
"Py" in "Python"        # True
3 in [1, 2, 3]          # True
"key" in {"key": "value"}  # True

6. Lambda 表達式

python
# 匿名函數表達式
add = lambda x, y: x + y
add(5, 3)  # 結果:8

# 常用於高階函數
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
# 結果:[1, 4, 9, 16, 25]

7. 生成器表達式

python
# 產生迭代器而不創建完整列表
squares = (x**2 for x in range(10))
sum(squares)  # 結果:285

# 與列表推導式的區別
list_comp = [x**2 for x in range(10)]  # 立即創建完整列表
gen_expr = (x**2 for x in range(10))   # 按需產生元素

8. 切片表達式

python
text = "Python Programming"
text[0:6]       # 結果:"Python"
text[7:]        # 結果:"Programming"
text[::2]       # 步長為2:"Pto rgramig"
text[::-1]      # 反轉:"gnimmargorP nohtyP"

表達式 vs 語句

理解表達式與語句的區別很重要:

特徵表達式 (Expression)語句 (Statement)
返回值總是返回一個值不返回值 (None)
能否賦值可以不能
範例x + 5func()a and biffordefimport
python
# 表達式可以作為賦值的一部分
result = 5 + 3 * 2  # 這是表達式

# if 是語句,不能賦值給變數
# 錯誤:x = if True: 5 else: 3

# 但條件表達式(三元運算符)是表達式,可以賦值
x = 5 if True else 3  # 正確,這是表達式

實際應用範例

python
# 複雜表達式範例
def calculate_discount(price, is_member=False, has_coupon=False):
    # 使用多重條件表達式
    discount = 0.2 if is_member else 0.1 if has_coupon else 0
    
    # 計算最終價格
    final_price = price * (1 - discount)
    
    # 確保價格不為負數
    return max(final_price, 0)

# 使用表達式進行資料處理
data = [10, 25, 30, 45, 50]

# 過濾並轉換數據
filtered = [
    x * 1.1  # 增加10%
    for x in data
    if x > 20  # 只取大於20的值
]
# 結果:[27.5, 33.0, 49.5, 55.0]

最佳實踐建議

  1. 保持表達式簡單:避免過於複雜的表達式

  2. 使用括號提升可讀性:即使優先級正確,括號也能讓意圖更清晰

  3. 適當使用表達式:在簡單情況下使用條件表達式,複雜邏輯仍用 if 語句

  4. 避免副作用:表達式應盡量無副作用,使代碼更可預測

Python 表達式的靈活性是其強大功能之一,正確使用可以使代碼更簡潔、更優雅。

留言