在 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}
像在 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
函式來取得索引和對應的項目。
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()
函式將列表進行配對。
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
對象,它是一個迭代器,將多個可迭代對象中的第一項配對在一起,接著將第二項配對在一起,依此類推。如果參與的可迭代對象長度不同,則以最短的可迭代對象的長度作為配對的基準。