可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def person(name, age, **kw): print 'name:',name,'age:',age,'other:',kw def test(a,b,**kwargs): print a,b,kwargs if __name__ == '__main__': person('Gs',28) person('Gs',28,city='Xuzhou',school='hangzhou')
关键字参数有什么用?它可以扩展函数的功能。比如,在person
函数里,我们保证能接收到name
和age
这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
kw={'city':'Xuzhou','school':'hangzhou'} person('Gs',28,**kw)
通过一个tuple和dict,你也可以调用该函数:
def person(name, age,*args, **kw): print 'name:',name,'age:',age,'args:',args,'kw:',kw if __name__ == '__main__': args = (1, 2, 3) kw={'city':'Xuzhou','school':'hangzhou'} person('Gs',28,*args,**kw)
所以,对于任意函数,都可以通过类似func(*args, **kw)
的形式调用它,无论它的参数是如何定义的。
要注意定义可变参数和关键字参数的语法:
*args
是可变参数,args接收的是一个tuple;
**kw
是关键字参数,kw接收的是一个dict。