当函数的参数不确定时,可以使用*args 和**kwargs,*args 以元组方式存贮,**kwargs是字典格式。
*args
def ff(*args): for value in args: print "arg:", value ff(1, "two", 3) # *args可以当作可容纳多个变量组成的元组
**kwargs
def ff(**kwargs): for key in kwargs: print "keyword arg: %s: %s" % (key, kwargs[key])
args代表的是位置参数,而kwargs代表的是关键字参数。
位置参数:在函数定义阶段,按照从左到右的顺序定义的形参,称为位置形参 特点:但凡是按照位置定义的形参。都必须被传值,多一个不行,少一个也不行。
关键字实参:在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参 特点:打破位置的限制,但仍能为指定的形参赋值 foo(y=1,x=2)
注意,此时args和kwargs在函数内部直接用的时候,分别是元组和字典,如果想把他们依然按照不定参数的方式传递给其他函数(比如对print函数做个包装,将包装函数中传给print函数的参数传给print函数,见示例),那就继续使用*args和**kwargs。
def ff(*args, **kwargs): print(args[0]) for k,v in kwargs.items(): print(k, v) print(*args)