Python中可以进行条件解包吗?

问题描述 投票:0回答:1

我目前正在一个python项目中做几个API之间的接口。

基本上,在某些时候,我必须从“Builder”对象调用方法。有两种类型的构建器:GetBuilder 和 AggregateBuilder(对于想知道的人,我正在使用 Weaviate API)。它们都允许我设置混合搜索,如下所示:

search_settings = {param_1: value_1, param_2: value_2, ...}

get_builder = get_builder.with_hybrid(**search_settings)
aggregate_builder = aggregate_builder.with_hybrid(search_settings)

请注意,两种语法之间的唯一区别是 GetBuilder 的字典解包。

我的问题是一般性的:是否有一种干净的方法来执行条件解包?

到目前为止,我找到的唯一选择是:

1 如果 - 否则

aggregate: bool
builder: GetBuilder | AggregateBuilder

if aggregate:
    builder = builder.with_hybrid(settings)
else:
    builder = builder.with_hybrid(**settings)

高效、清晰,但我觉得多余

2 使用评估

aggregate: bool
builder: GetBuilder | AggregateBuilder

builder = eval("builder.with_hybrid({}settings)".format("**"*(not aggregate)))

可以工作,但不清楚,并且 eval 函数使用起来感觉不对

还有其他方法可以干净地执行条件解包吗?

python conditional-statements unpack
1个回答
0
投票

我觉得选项 1 不错。如果您想对

builder.with_hybrid()
进行一次呼叫,您可以执行以下操作:

if aggregate:
    args, kwargs = [settings], {}
else:
    args, kwargs = [], settings

builder.with_hybrid(*args, **kwargs)

© www.soinside.com 2019 - 2024. All rights reserved.