python收集引數與解包
阿新 • • 發佈:2020-09-03
收集任意數量的實參
def make_pizza(*toppings): """列印顧客點的所有配料""" print(toppings) make_pizza('pepperoni') make_pizza('mushrooms', 'green peppers', 'extra cheese')
形參名*toppings 中的星號讓Python建立一個名為toppings 的空元組,並將收到的所有值都封裝到這個元組中。注意,Python將實參封裝到一個元組中,即便函式只收到一個值也如此:
('pepperoni',)
('mushrooms', 'green peppers', 'extra cheese')
傳遞任意數量的關鍵字實參
1 def build_profile(first, last, **user_info): 2 """Build a dictionary containing everything we know about a user.""" 3 profile = {} 4 profile['first_name'] = first 5 profile['last_name'] = last 6 for key, value in user_info.items(): 7 profile[key] = value8 return profile 9 10 user_profile = build_profile('albert', 'einstein', 11 location='princeton', 12 field='physics') 13 print(user_profile)
形參**user_info 中的兩個星號讓Python建立一個名為user_info 的空字典,並將收到的所有名稱—值對都封裝到這個字典中。
{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}
解包引數
1. 我們可以給函式unwrap傳遞含有四個引數的元組,並且讓python自動將這個元組解包成相應的引數.
2.類似的,在函式呼叫時,** 會以鍵/值對的形式把一個字典解包為獨立的關鍵字引數.
1 def unwrap(a, b, c, d): 2 print(a, b, c, d) 3 4 unwrap(1, 2, 3, 4) #列印: 1 2 3 4 5 6 args = (1, 2, 3, 4) 7 unwrap(*args) #列印: 1 2 3 4 8 9 args_dict = {'a':1, "b":2, "c":3, "d":4} 10 unwrap(**args_dict) #列印: 1 2 3 4
別混淆函式頭部和函式呼叫時*/**的語法:在函式頭部,它意味著收集任意多的引數,而在函式呼叫時,它能解包任意多的引數.在兩種情況下,一個星號代表基於位置的引數,兩個星號代表關鍵字引數.