* 和 ** 使用在函數中,可以時是函數可以接受任意多的參數,也就時收集參數的作用。
1. * 的使用
函數參數中使用一個星號的目的時收集多餘的位置參數,如果沒有多餘的參數收集,帶星號的參數就是 個空元組。
另外對於函數調用的地方使用星號,是參數收集的逆過程,使用時不是要收集參數,而是函數執行中進行參數分配
實例:
def printInfo(name, *others):
print(name)
# others is one Tuple
print(others)
printInfo('devin')
print('*' * 20)
printInfo('devin', 25, 'male')
print('-' * 20)
info = ('devin', 25, 'male')
printInfo(*info)
輸出結果:
devin
()
********************
devin
(25, 'male')
--------------------
devin
(25, 'male')
2. ** 的使用
函數參數中使用雙星號(**)的目的處理關鍵字參數的收集操作,返回的時字典而不是元組
同樣,在調用函數時使用 **來進行字典參數的傳遞,可以實現在函數體中進行參數的分配-參數收集的逆過程。
實例:
def printInfo(name, *param1, **param2):
print(name)
print(param1)
print(param2)
printInfo('Devin', 25, 'male', role='freedom', hope='peace')
print('=' * 40)
def printInfo2(name, age):
print(name)
print(age)
info = {'name': 'devin', 'age': 'peace'}
printInfo2(**info)
輸出結果:
Devin
(25, 'male')
{'role': 'freedom', 'hope': 'peace'}
========================================
devin
peace