强制关键字参数是3.1版本引入的新特性,目的是在可变长度的位置参数或关键字参数后增加常规参数(可选填默认值),给其赋值必须强制通过关键字传入。
强制关键字参数不同于关键字参数。1)下面的参数列表在Python2中不被允许,但现在a是一个强制关键字参数,给a赋值必须强制给出"a=xx"
>>> def foo(*args, a):... print(args, a)
foo(1,2,3,4):错误,a未被赋值
foo(1,2,3,4, a=5):正确
>>> def foo(*args, a=5):
... print(args, a)
foo(1,2,3,4):正确,但a为默认值5
2)引入*标记
在可变长度的位置参数或是关键字参数后跟常规参数,那么该常规参数就一定是强制关键字参数,但在常规参数后如何跟强制关键字参数呢?
def compare(a, b, *, q1, q2=3):
...
“*”之后的都是强制关键字参数,上面例子中q1与q2都是强制关键字参数
>>> def foo(a,b,c=3): # c是关键字参数
... print(a,b,c)
foo(1,2,4):返回"1 2 4"
>>> def foo(a,b,*,c=3): # c是强制关键字参数
... print(a,b,c)
foo(1,2,4):错误,c未被赋值
foo(1,2,c=4):正确,返回"1 2 4"
总之:
强制关键字参数的赋值必须显示通过关键字传入。
当强制关键字参数无默认值时,调用时必须给其赋值,否则报错;当强制关键字参数有默认值时,若调用时不给其显示赋值,其使用默认值。
文中若有不当之处,还望包容和指出,谢谢