iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Python

初學者的 30 天 Python 復健課程系列 第 21

復健第二十一天:來不及寫完的打包與解包

  • 分享至 

  • xImage
  •  

打包與解包

在 Python 中,有時我們不確定需要傳遞多少個參數給函式。這時可以使用打包(Packing)的方法,使函式可以接受不限定數量的引數。

列表的打包

我們可以使用 *args 來將多個參數打包成一個元組,這樣就可以傳入任意數量的引數。

def sum_all(*args):
    s = 0
    for i in args:
        s += i
    return s

print(sum_all(1, 2, 3))             # 6
print(sum_all(1, 2, 3, 4, 5, 6, 7)) # 28

字典的打包

我們可以使用 **kwargs 將關鍵字引數打包成字典,這樣就可以傳入任意數量的命名參數。

def packing_person_info(**kwargs):
    # kwargs 是字典類型
    for key in kwargs:
        print(f"{key} = {kwargs[key]}")
    return kwargs

print(packing_person_info(name="Asabeneh", country="Finland", city="Helsinki", age=250))

輸出:

name = Asabeneh
country = Finland
city = Helsinki
age = 250
{'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}

解包(Spreading)

像在 JavaScript 一樣,Python 也可以進行解包操作。解包可以將列表或其他可迭代物件的元素展開。

lst_one = [1, 2, 3]
lst_two = [4, 5, 6, 7]
lst = [0, *lst_one, *lst_two]
print(lst)  # [0, 1, 2, 3, 4, 5, 6, 7]

country_lst_one = ['Finland', 'Sweden', 'Norway']
country_lst_two = ['Denmark', 'Iceland']
nordic_countries = [*country_lst_one, *country_lst_two]
print(nordic_countries)  # ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']

枚舉(Enumerate)

當我們想知道列表中每個項目的索引時,可以使用內建的 enumerate 函式來取得索引和對應的項目。

for index, item in enumerate([20, 30, 40]):
    print(index, item)

# 輸出
# 0 20
# 1 30
# 2 40

我們也可以將 enumerate 與條件判斷結合使用:

countries = ["Taiwan", "Canada", "Finland"]

for index, item in enumerate(countries):
    if item == 'Finland':
        print(f'The country {item} has been found at index {index}')

# 輸出
# The country Finland has been found at index 2

Zip

有時我們想在迴圈中同時遍歷多個列表,可以使用 zip() 函式將列表進行配對。

fruits = ['banana', 'orange', 'mango', 'lemon', 'lime']                    
vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
fruits_and_veges = []

for f, v in zip(fruits, vegetables):
    fruits_and_veges.append({'fruit': f, 'veg': v})

print(fruits_and_veges)

zip() 函式會返回一個 zip 對象,它是一個迭代器,將多個可迭代對象中的第一項配對在一起,接著將第二項配對在一起,依此類推。如果參與的可迭代對象長度不同,則以最短的可迭代對象的長度作為配對的基準。


上一篇
復健第二十天:不用不知道,用過才知道的 RegEx 正規表達式
下一篇
復健第二十二天:又來不及寫完的檔案處理
系列文
初學者的 30 天 Python 復健課程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言