def make_pizza(*toppings): """列印顧客點的所有配料""" print(toppings) make_pizza('pepperoni') make_pizza('mushrooms', 'green peppers', 'extra cheese')可以看到,make_pizza() 函數中,只包含一個形參 *toppings,它表示建立一個名為 toppings 的空元組,並將收到的所有值都封裝到這個元組中。並且,函數體內的 print() 通過生成輸出來證明 Python 既能夠處理使用一個值呼叫函數的情形,也能處理使用三個值來呼叫函數的情形。
('pepperoni',)
('mushrooms', 'green peppers', 'extra cheese')
仍以製作披薩為例,現在需要客人明確指明要購買披薩的尺寸,那麼修改後的函數如下所示:這種情況下,Python 會先匹配位置實參,再將餘下的實參收集到最後一個形參中。
def make_pizza(size, *toppings): """概述要製作的披薩""" print("nMaking a " + str(size) + "-inch pizza with the following toppings:") for topping in toppings: print("- " + topping) make_pizza(16, 'pepperoni') make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')輸出結果為:
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
def build_profile(first, last, **user_info): profile = {} profile['first_name'] = first profile['last_name'] = last for key, value in user_info.items(): profile[key] = value return profile user_profile = build_profile('albert', 'einstein', location='princeton', field='physics') print(user_profile)執行結果為:
{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}
注意觀察,函數 build_profile() 中,形參 **user_info 表示建立一個名為 user_info 的空字典,並將接受到的所有鍵值對都儲存到這個字典中。這裡的 **user_info 和普通字典一樣,我們可以使用存取其他字典那樣存取它儲存的鍵值對。
def build_profile(first, last, *infos, **user_info): print(first,last) for info in infos: print(info) for key, value in user_info.items(): print(key,":",value) build_profile('first:albert', 'last:einstein', "age:29","TEL:123456",location='princeton', field='physics')執行結果為:
first:albert last:einstein
age:29
TEL:123456
location : princeton
field : physics