函數的參數可以有任意多個;用星號*開頭來作為形式參數名,可以將所有實際參數收錄到一個元組中。
例如 printall 就可以獲取任意多個數的參數,然后把它們都打印輸出:
>>> def printall(*args):
... print(args)
...
你可以隨意命名收集來的這些參數:
>>> printall(1, 2.0, '3', 'apple')
(1, 2.0, '3', 'apple')
與聚集相對的就是分散了;如果有一系列的值,然后想把它們作為多個參數傳遞給一個函數,就可以用星號*運算符。
比如 divmod 要求必須是兩個參數;但如果給它一個元組,是不能進行運算的:
>>> t = (7, 3)
>>> divmod(t)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: divmod expected 2 arguments, got 1
但如果拆分這個元組,就可以了:
>>> divmod(*t)
(2, 1)
很多內置函數都用到了參數長度可變的元組。比如 max 和 min 就可以接收任意數量的參數:
>>> max(1, 2, 3)
3
但求和函數 sum 就不行了:
>>> sum(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum expected at most 2 arguments, got 3
結束。