有条件地将任意数量的默认命名参数传递给函数


问题内容

是否可以有条件地将任意数量的命名默认参数传递给Python函数?

例如。有一个功能:

def func(arg, arg2='', arg3='def')

现在的逻辑是,我有一个确定是否需要传递arg3的条件,我可以这样做:

if condition == True:
    func('arg', arg2='arg2', arg3='some value')
else:
    func('arg', arg2='arg2')

问题是,我可以像这样简写:

func('arg', 'arg2', 'some value' if condition == True else # nothing so default gets picked
)

问题答案:

我能想到的唯一方法是

func("arg", "arg2", **({"arg3": "some value"} if condition == True else {}))

要么

func("arg", "arg2", *(("some value",) if condition == True else ()))

但请不要这样做。使用您自己提供的代码或类似的代码:

if condition:
   arg3 = "some value",
else:
   arg3 = ()
func("arg", "arg2", *arg3)