Skip to main content

Python 中變數指派的特殊方式

除了基本的一個變數對應一個值之外,Python 還提供了其他特殊的變數指派方式。
可簡單分為:

Positional unpacking
Sequence unpacking
Augment Assignment

Positional Unpacking: 依位置解包

  • 原則上就是一組變數依序對應同等數量的一組參數值。
1 2 3 4 5 6 7 8 [firstName, lastName] = ['Michael', 'Jackson'] [firstName, lastName] = ('Michael', 'Jackson') firstName, lastName = 'Michael', 'Jackson' print(firstName) # Michael print(lastName) # Jackson

Sequence unpacking: 依順序解包依位置解包

Generalized Sequence Unpacking

1 2 3 4 5 6 7 8 9 x, y, z = 'CAT' print(x) # C print(y) # A print(z) # T

Extended Sequence Unpacking

1 2 3 4 5 6 7 a,*b = 'pluck' print(a) # p print(b) # ['l', 'u', 'c', 'k'] # <class 'list'>

Augmented Assignment: 增強賦值/賦值運算

這邊指的是一邊運算一邊將結果指配給先前定義變數。
+=, -=, *=, /=, ^=...
需注意的是上述 operators,並非通用於所有類型(基本上數值類皆可使用)。
須注意使用情境與是否有 overloaded(例如用於 List 類型上)。

  • 注意: 若使用 Augmented Assignment 的物件
    • 為不可變型別(immutable),例如 String, 則 unpack 後會回傳一個新的物件。
    • 若為可變型別,例如 List,則會發生 原處修改 ,也就是 reference 共享。操作時會改動到原始物件。
    • ex: list 的 += 運算等同於 extend()
  • 參考: Python 運算子