在这个例子中,我有一个带有可选参数的函数。 E.g。
def func_x(arg_foo='foo'):
# Do something
pass
在调用函数时,我只想在某些条件下指定参数。
这是一种做法。
if cond == True:
func_x(arg_foo='coo')
else:
func_x()
但是,我拥有的实际示例(实际上是boto3 dynamodb查询函数)具有许多可选参数,我想在某些条件下指定。
如果我有选择的话,我不想做以下事情:
if condition_a:
long_func_call(many_optional_argument_names=many_optional_argument_values)
elif condition_b:
long_func_call(many_optional_argument_names=many_optional_argument_values)
elif condition_c:
long_func_call(many_optional_argument_names=many_optional_argument_values)
else:
long_func_call(many_optional_argument_names=many_optional_argument_values)
我已经尝试了以下但是它没有工作:
long_func_call(
arg1='' if cond_a else 'value',
arg2=None if cond_b else 'value'
)
我打电话的功能不接受''也没有作为其可选参数的输入。
有没有办法在某些条件下指定可选参数?
答案 0 :(得分:4)
kwargs = {}
if condition_a:
kwargs['arg_a'] = value_a
if condition_b:
kwargs['arg_b'] = value_b
...
long_func_call(**kwargs)
使用关键字参数的字典。
答案 1 :(得分:0)
你可以使用lambda
if cond:
func = lambda:func_x(arg_foo='coo')
else:
func = func_x
func()