带有强制关键字的可选参数

时间:2019-06-29 11:54:29

标签: python

是否可以为函数提供可选参数,但是如果要在函数调用中声明关键字,则必须使用关键字吗?

例如,

def f(arg1, *otherargs, useme2declare):
    ....

需要一个强制性第一个参数,后跟一些未指定数量的位置和可选参数(带有可选关键字),但是useme2declare要求在调用中使用该关键字,它也是强制性参数。如何在通话中使其成为可选内容?将其放在*otherargs之前也会使关键字成为可选关键字。

编辑:请仔细阅读我的问题。我想每次调用该函数时都为useme2declare使用关键字MANDATORY,同时使useme2declare的输入为可选。

1 个答案:

答案 0 :(得分:3)

您可以在所有位置参数之后的签名中使用useme2declare来使参数*仅使用关键字{em} ,并为基本情况使用默认值:

def f(arg1, otherarg1, otherarg2, *, useme2declare=None):

这里是一个例子:

In [981]: def spam(*, egg=5): 
     ...:     return egg 
     ...:                                                                                                                                                                                                      

In [982]: spam(100)                                                                                                                                                                                         
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-982-8ddebef6cd4e> in <module>
----> 1 spam(100)

TypeError: spam() takes 0 positional arguments but 1 was given

In [983]: spam(egg=100)                                                                                                                                                                                     
Out[983]: 100

请注意,在使用此参数时,不能使用可变长度的位置参数(例如*args)。

但是,如果需要,您可以自由使用可变长度关键字参数:

def f(arg1, *, useme2declare=None, **kwargs):