9.5.5 命名关键字参数
命名关键字参数有两种形式:
def person(name,age,*,city,job)
或者
def person(name,age,city)
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符,*后面的参数被视为命名关键字参数。
9.5.6 参数的组合
顺序:必选参数、默认值参数、命名关键字参数或者关键字参数
在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。
def func(a,b,c=0,*args,**kw):
print 'a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw
print func(1,2)
# = > a= 1 b= 2 c= 0 args= () kw= {}
print func(1,2,c=3)
# = > a= 1 b= 2 c= 3 args= () kw= {}
print func(1,2,3,'a','b')
# => a= 1 b= 2 c= 3 args= ('a', 'b') kw= {}
print func(1,2,3,'a','b',x=99)
# =>a= 1 b= 2 c= 3 args= ('a', 'b') kw= {'x': 99}``
小结
如果形参中已经有一个args了,命名关键字参数就不再需要一个单独的*作为分隔符号了。
可变参数args与关键字参数kwargs通常是组合在一起使用的,如果一个函数的形参为args与kwargs,那么代表该函数可以接收任何形式、任意长度的参数。
提示: *args、**kwargs中的args和kwargs被替换成其他名字并无语法错误,但使用args、kwargs是约定俗成的。
综上所述,所有参数可任意组合使用,但定义顺序必须是:
位置参数、默认参数、*args、命名关键字参数、**kwargs