有条件地将命名关键字参数传递给函数

时间:2018-05-09 16:44:29

标签: python

我不确定我是否在我的问题中使用了正确的措辞,但我的情况是我正在调用一个函数并将值传递给它的一个命名关键字参数,前提是我有一个值它。我目前正在做的一个简化示例:

var_1 = data.get("var_1", None)

if var_1:
    some_function(some_arg=var_1)
else:
    some_function()

函数some_function()不接受将some_arg设置为None,因此如果我有一个有效的值,我只能调用带有命名参数的函数。

上面不太适合我的原因是我正在制作的实际函数调用有一堆(5+)我设置的命名参数。这导致重复大多数类似的函数调用,这些函数调用仅相差一个参数。

有没有更好的方式/更多Pythonic方式来做到这一点?我希望我可以调用该函数并设置我可能希望传递的所有可能的命名参数,但是在运行时,只传递我实际拥有的值。

如果重要,函数调用将发送到AWS Python SDK(Boto3),因此我无法改变函数的行为。

1 个答案:

答案 0 :(得分:3)

你能做的是:

var_1 = data.get("var_1", None)
fun_kwargs = {'some_arg': var_1} if var_1 else {}
some_function(**fun_kwargs)

如果你有多个参数,你可以这样做:

fun_kwargs = {}
if var1: fun_kwargs['some_arg1'] = var_1
if var2: fun_kwargs['some_arg2'] = var_2
if var3: fun_kwargs['some_arg3'] = var_3
some_function(**fun_kwargs)