1. 程式人生 > 實用技巧 >python收集引數與解包

python收集引數與解包

收集任意數量的實參

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] = value
8 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

別混淆函式頭部和函式呼叫時*/**的語法:在函式頭部,它意味著收集任意多的引數,而在函式呼叫時,它能解包任意多的引數.在兩種情況下,一個星號代表基於位置的引數,兩個星號代表關鍵字引數.