Python 有条件地将命名关键字参数传递给函数
我不确定我在问题中是否使用了正确的措辞,但我遇到的情况是,我正在调用一个函数,并且仅当我有一个值时才将一个值传递给它的一个命名关键字参数。我目前如何做的一个简化示例:Python 有条件地将命名关键字参数传递给函数,python,Python,我不确定我在问题中是否使用了正确的措辞,但我遇到的情况是,我正在调用一个函数,并且仅当我有一个值时才将一个值传递给它的一个命名关键字参数。我目前如何做的一个简化示例: var_1 = data.get("var_1", None) if var_1: some_function(some_arg=var_1) else: some_function() 函数some\u function()不接受将some\u arg设置为None,因此我只能在具有有效值的情况下使用命名参数
var_1 = data.get("var_1", None)
if var_1:
some_function(some_arg=var_1)
else:
some_function()
函数some\u function()
不接受将some\u arg
设置为None,因此我只能在具有有效值的情况下使用命名参数调用该函数
上述内容对我来说不太可取的原因是,我正在进行的实际函数调用有一堆(5+)我设置的命名参数。这会导致重复大部分相似的函数调用,这些调用只相差一个参数
有没有更好的方法/更像蟒蛇的方法?我希望我可以调用该函数并设置所有可能要传递的命名参数,但在运行时,只传递我实际需要的值
如果有问题,函数调用是对AWS Python SDK(Boto3)的,因此我无法更改函数的行为。您可以做的是:
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)
some_arg
是否有已知的默认值,或者它是严格可选的关键字参数(例如,从**kwargs
中提取)?此方法是否可扩展到多个参数?e、 g.两个不同kwargs的var_1
和var_2
?@swigganicks是的,只需将可用的内容填入dict
,并用**
传递给函数即可。我添加了一个示例,其中包含一种可能的方法。