* 語法
用于函數(shù)傳參中,對于需要多個位置參數(shù)(positional argument)的函數(shù),將元組或列表展開(unpacking)為一個或多個位置參數(shù)。
注:其實只要是可迭代(iterable)的對象都可以通過此方式展開,而不僅僅是前面講的元組或列表。
row = ('ACME', 50, 91.5)
lis = list(row)
print(*row)
print(*lis)
等效于print('ACME', 50, 91.5)
輸出:
ACME 50 91.5
ACME 50 91.5
** 語法
用于函數(shù)傳參中,對于需要多個關(guān)鍵字參數(shù)(keyword argument)的函數(shù),將詞典展開(unpacking)為一個或多個關(guān)鍵字參數(shù)
d={ 'end':'!!!\n', 'sep':', '}
print('Hello', 'world', **d)
輸出:
Hello, world!!!
同時使用 * 和 ** 語法
row = ('ACME', 50, 91.5)
d={ 'end':'!!!\n', 'sep':', '}
print(*row, **d)
輸出:
ACME, 50, 91.5!!!
Exception Note
注意:print(*row, **d) 或 print(sep=', ', end='!!!\n', *row) 的寫法都是OK的,但是不可以寫成print(**d, *row). 因為位置參數(shù)不可在關(guān)鍵字參數(shù)之后。
否則將提示
SyntaxError: iterable argument unpacking follows keyword argument unpacking
參考
*args 和 **kwargs - 《Python 進階》on Gitbook