通过在形参的前面加上“ * ”表示:
def func(*args):
print("There have {} members".format(len(args)))
print("The second member is {}".format(args[1]))
func(1, 2, 3, 4)
## There have 4 members
## The second member is 2
def fun(*args):
print(args)
fun(1, 2, 3, 4, 5)
## (1, 2, 3, 4, 5)
#通过利用元组将多个返回值打包,同时可以通过使用获取元组中每一个元素的方式将函数解包
def funa(*args):
print(type(args))
funa(1,2,3,4,5)
## <class 'tuple'>
如果在收集参数后面还需要传入其他参数,那么在调用函数的时候就应该使用关键字参数来指定后面的参数。
def funa(*args, a, b):
print(args, a, b)
funa(1,2,3,a=4,b=5)
## (1, 2, 3) 4 5
除了将参数打包为元组,收集参数还可以将参数打包为字典,使用“ ** ”:
def func(**kwargs):
print(kwargs)
func(a=1, b=2, c=3)
## {'a': 1, 'b': 2, 'c': 3}
函数会自动将关键字参数拆分为键值对传递到kwargs里。
以下是收集参数的多个方法的混合使用:
def func(a, *args, **kwargs):
print(a, args, kwargs)
func(1, 2, 3, b=2, c=3, d=4)
## 1 (2, 3) {'b': 2, 'c': 3, 'd': 4}
# 其中第一个实参传入形参a, 后面两个位置参数传入args, 最后面的三个关键字参数传入kwargs
实例:str.format()函数
首先我们先看看help下的str.format函数
Help on method_descriptor:
format(...) unbound builtins.str method
S.format(*args, **kwargs) -> str
Return a formatted version of S, using substitutions from args and kwargs.
The substitutions are identified by braces ('{' and '}').
其第一个参数是元组形式的收集参数,第二个参数是字典形式的收集参数。