函数的参数可以有任意多个;用星号*开头来作为形式参数名,可以将所有实际参数收录到一个元组中。
例如 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
结束。