Python强制关键字参数

强制关键字参数是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"


总之:
强制关键字参数的赋值必须显示通过关键字传入。

当强制关键字参数无默认值时,调用时必须给其赋值,否则报错;当强制关键字参数有默认值时,若调用时不给其显示赋值,其使用默认值。


文中若有不当之处,还望包容和指出,谢谢


猜你喜欢

转载自blog.csdn.net/jinixin/article/details/79510526