跳到主要內容

[Python教學]Python Unpacking實用技巧分享

Photo by Andrew Neel on Unsplash
Python相較於其他程式語言,以能夠用簡潔的語法來達到相同的運算聞名,本篇要來教大家的Python Unpacking技巧,就是讓您在操作像串列(List)元組(Tuple)字典(Dictionary)可疊代的資料型態時,能夠用簡潔且有效率的語法來取出其中的元素,進而做其他更複雜的運算。

Unpacking顧名思義就是將打包好的資料取出來,這邊整理了五個使用的情境,包含了:
  • List Unpacking(串列開箱)
  • Tuple Unpacking(元組開箱)
  • For-Loop Unpacking(迴圈開箱)
  • Swapping Variables Value(交換變數值)
  • Unpacking Operator(開箱運算子)

一、List Unpacking(串列開箱)

在一般的情況下,我們要存取串列(List)中的資料並且指派給變數時,通常會像下面範例這樣做:
這種寫法當我們要指派的變數越多時,就會顯得沒有效率,這時候就能夠使用Unpacking的技巧,將串列(List)中的資料指派給多個變數,如下範例。
這樣程式碼是不是簡潔多了呢。範例中有一個需要特別要注意的地方,串列(List)中的資料個數要與變數的個數一致,不然會發生例外錯誤。
當串列中有大量的資料時,則可以獨立定義所需的變數個數來透過Unpacking的方式來指派資料,剩下的元素則可以使用 * 符號來進行打包的動作,如下範例:
另一種變形的應用就是可取得串列(List)中第一個元素及最後一個元素,剩下的同樣可以用 * 符號打包起來,如下範例:

二、Tuple Unpacking(元組開箱)

串列(List)的Unpacking技巧同樣可以使用於元組(Tuple),除了可以資料指派給多個變數外,也可以彈性的運用 * 符號來處理大量的資料,如下範例。

三、For-Loop Unpacking(迴圈開箱)

舉例來說,當我們透過Python的For-Loop迴圈讀取串列(List)中的元素時,想要同時取得元素的索引值及資料,這時候可以搭配enumerate()方法及Unpacking的技巧來達成,如下範例:
從範例中的執行結果可以看到,在每一次迴圈的讀取時,enumerate()方法會回傳一個元組(Tuple)資料型態,我們就可以直接在For-Loop迴圈的地方Unpacking元組(Tuple)的資料給兩個變數,來達到同時取得元素索引值及資料的效果,如下範例:

另一個使用情境就是在透過Python的For-Loop迴圈讀取字典(Dictionary)中的元素時,我們使用的items()方法也是回傳一個元組(Tuple)資料型態,所以同樣我們也可以利用Unpacking的技巧來同時取得鍵(Key)及值(Value),如下範例:

四、Swapping Variables Value(交換變數值)

再來介紹一個Unpacking的使用情境,如果我們要互換兩個變數的值,在不使用Unpacking的技巧時,我們會這樣做:
首先多定義一個變數c,然後把a的值先指派給c,接著把b的值指派給a,最後再把c(當初a的值)指派給b,這樣就達到了兩個變數值互換的效果。而我們使用了PythonUnpacking技巧後,只需寫一行,如下範例:
為什麼我們可以這樣寫呢?在元組(Tuple)的文章中有說提到,當我們使用逗號區隔兩個變數時,Python預設為元組(Tuple)資料型態,如下範例:
是不是很熟悉,這一行其實就是在做元組(Tuple)Unpacking動作,只要一行即可達到變數值互換的效果。

五、Unpacking Operator(開箱運算子)

Unpacking Operator分為:
  • * 符號:用於任何可疊代的(Iterable)物件。
  • ** 符號:只能用於字典(Dictionary)物件 
主要用途為分解可疊代的(Iterable)物件元素,在進行建立或合併時非常的實用。首先來看 * 符號的使用範例:

接著我們來看 ** 符號運用於字典(Dictionary)資料型態的範例:
從執行結果中可以看到,當合併字典(Dictionary)時,相同的鍵(Key)會被之後出現的鍵(Key)覆蓋,所以只印出Mike的體重而沒有身高。

六、小結

以上就是Python Unpacking的實用技巧,不但讓我們的程式碼簡潔,在操作可疊代的(Iterable)物件時也更加靈活。練習的過程中若有碰到任何問題或說明不清楚的地方,歡迎留言與我分享!

如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊










留言

張貼留言