🐍【Python 教學】超實用的拆包魔法: Unpacking

更新 發佈閱讀 6 分鐘

大家好。今天我們要來聊一個超級實用、但常被初學者忽略的魔法——Unpacking 與 Extended Iterable Unpacking

如果你還不知道它們有多好用,那你一定會在看完這篇文章後忍不住想試一試這個神奇的unpacking語法。 XD


✨ 什麼是 Unpacking?

簡單講:把一個Python語言裡的可迭代容器、物件,像是list、tuple、dict、string…等等,把裡面的東西,一口氣一一對應分配給每一個等號左側的變數。

就像你買了便當,打開後自動分成:

  • 飯 → rice
  • 肉 → meat
  • 青菜 → veggie

在Python ,我們就可以這樣寫:

rice, meat, veggie = ["白飯", "雞腿", "燙青菜"]

# 執行上面這一行之後,對應的結果為​
# rice = 白飯
# meat = 雞腿
# veggie = 燙青菜​
#
# 依照前後順序,一一對應分配給每一個等號(=)左側的變數,相當直覺!

🎉 Unpacking語法帶來哪些好處?

  1. 每個變數依照順序對應到內容
  2. 程式碼更乾淨
  3. 可讀性更高
  4. 更 Pythonic 的coding style

🐣 基本拆包:超nice入門款

🥚 例子:把三個數字拆給三個變數

a, b, c = (1, 2, 3)

# 執行結果
# a = 1
# b = 2
# c = 3

如果你把變數寫太多或太少…

Python也會在Error Message回報對應的錯誤訊息,
告訴你=左側的變數總數量對不上。

a, b = (1, 2, 3)
# ValueError: too many values to unpack

# 等號左側對應的變數數量太少,少了一個
a, b, c, d = 1, 2, 3
# ValueError: not enough values to unpack (expected 4, got 3)
# ​等號左側對應的變數數量太多,多了一個
# 也可以說,等號右側待分配的數量太少,少了一個​

🧙 進階拆包:
Extended Iterable Unpacking
真正讓你變魔法師的部分

這個feature從 Python 3 開始成為正式功能。

你可以在拆包時加入 *,讓某個變數接收「配對之後,剩餘的所有項目」。

🎩 基本示範:*rest 拿全部剩下的

head, *rest = [1, 2, 3, 4, 5]

# 執行結果
# head = 1
# rest = [2, 3, 4, 5]

🍱 多重變數拆包:自由度超高

first, *middle, last = [10, 20, 30, 40, 50]

# 執行結果
# first = 10
# middle = [20, 30, 40]
# last = 50

這在 log parser、串流資料處理、訊息格式解碼等情境非常實用。


🤫 Python unpacking
也支援dummy variable: _

有時候,你拆到一些你不 care 的資料(don't care item),可用 _ 來忽略。

a, _, c = (1, 2, 3)

# 執行結果
# a = 1
# _​ = 2
# c = 3

當然,這裡也支援多變數拆包(Unpacking)

a, *_, c = [1, 2, 3, 4, 5]

# 執行結果
# a = 1
# _​ = [2, 3, 4]
# c = 5

說到這,順便提供冷笑話一則~ XD

_ 表示:我又被忽略了……但我已經習慣了😢


🔥 高手級用法:多層拆包!

此外,Python 還支援多層次的巢狀拆包:

(a, b), (c, d) = [(1, 2), (3, 4)]
#​ 執行結果
# a = 1
# b = 2
# c = 3
# d = 4

同樣地,這裡也可以結合 extended unpacking:

(a, *rest), last = ([1, 2, 3, 4], 99)

# 執行結果
# a = 1
# rest = [2, 3, 4]
# last = 99​

⚡ 用於交換變數:Python 經典一行!

傳統的變數交換,大家一定再熟悉不過了

temp = a;
a = b;
b = temp;

# a, b 交換值

用拆包的技巧,可以達成同樣的swap功能

a, b = b, a

# a, b 交換值

簡潔、有型、安全又Pythonic。


🐍 總結:
拆包技術就像 Python 世界的忍術卷軸

Unpacking 與 Extended Unpacking帶來幾個明顯的好處

  • 語法更簡潔
  • 可讀性夠高
  • 在分配解析資料,或者交換變數時相當實用
  • 更趨向Pythonic coding style





留言
avatar-img
小松鼠的演算法樂園
98會員
428內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2025/05/11
🎮 Python 2048 遊戲教學: 從零開始打造好玩的方塊消除遊戲! 哈囉,同學們!今天我們要一起用 Python 寫一個超經典的遊戲--2048! 而且這個遊戲可以直接在Command line(也就是命令提示字元、Console)玩!
Thumbnail
2025/05/11
🎮 Python 2048 遊戲教學: 從零開始打造好玩的方塊消除遊戲! 哈囉,同學們!今天我們要一起用 Python 寫一個超經典的遊戲--2048! 而且這個遊戲可以直接在Command line(也就是命令提示字元、Console)玩!
Thumbnail
2025/05/04
今天我們來學一個有趣的小專案: 自己用 Python 寫一個「剪刀、石頭、布」猜拳遊戲! 學完這個,你就不只是學程式設計, 還能順便和電腦玩幾把猜拳,重拾兒時回憶喔!😄
Thumbnail
2025/05/04
今天我們來學一個有趣的小專案: 自己用 Python 寫一個「剪刀、石頭、布」猜拳遊戲! 學完這個,你就不只是學程式設計, 還能順便和電腦玩幾把猜拳,重拾兒時回憶喔!😄
Thumbnail
2024/10/10
從Python 內建deque資料結構的角度切入, 同時了解deque 與 FIFO Queue相關的function用法。 collections.deque是一種兩端點皆可進出的雙端佇列 在兩端點高效地在O(1)常數時間內添加和刪除元素。 這使得deque非常適合實現FIFO Queue
Thumbnail
2024/10/10
從Python 內建deque資料結構的角度切入, 同時了解deque 與 FIFO Queue相關的function用法。 collections.deque是一種兩端點皆可進出的雙端佇列 在兩端點高效地在O(1)常數時間內添加和刪除元素。 這使得deque非常適合實現FIFO Queue
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
進入選擇敘述語法了。常用的選擇敘述語法,弄懂了就運用自如。
Thumbnail
進入選擇敘述語法了。常用的選擇敘述語法,弄懂了就運用自如。
Thumbnail
這題開始,用到import了。使用模組中的內建函數,真的很省時又方便。
Thumbnail
這題開始,用到import了。使用模組中的內建函數,真的很省時又方便。
Thumbnail
  在寫程式時最重要的就是一開始的基本語法,今天要介紹的是if判斷式的基本用法,用起來非常簡單。
Thumbnail
  在寫程式時最重要的就是一開始的基本語法,今天要介紹的是if判斷式的基本用法,用起來非常簡單。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News