在Python中有时候需要允许用户提供任意数量的参数,为了实现这个功能,我们可以再函数参数前面添加一个*号,这样就可以接受多个函数的参数了。示例如下:
def main(*params): print(params) if __name__ == '__main__': main('test') main(1, 2, 3, 4) main()
上面代码输出结果如下:
('test',)
(1, 2, 3, 4)
()
因此参数前面的*号意味着手机多余的位置参数,如果没有多余的参数没那么其将是一个空元组。
此外如果带星号的参数放在函数参数的非末尾,那么需要将位于带星号参数之后的位置参数变为指定参数,不然会提示错误
示例如下:
def main(x, *params, z): print(x, params, z) if __name__ == '__main__': main(1, 2, 3, z=4) main(1, 2, 3, 4)
其结果如下:
1 (2, 3) 4
Traceback (most recent call last):
File "E:/learnPython/first.py", line 14, in <module>
main(1, 2, 3, 4)
TypeError: main() missing 1 required keyword-only argument: 'z'
如果我们想要收集指定参数,应该怎么办呢?Python提供了另外一个方法,就是在参数前使用两个星号,示例如下:
def main(**params): print(params) if __name__ == '__main__': main(x=1, y=2, z=4) main(1, 2, 3, 4)
其结果如下:
{'x': 1, 'y': 2, 'z': 4}
File "E:/learnPython/first.py", line 14, in <module>
main(1, 2, 3, 4)
TypeError: main() takes 0 positional arguments but 4 were given
因此使用两个带星号参数得到的是一个字典而不是一个元组,同时它也无法收集位置参数。