我目前正在一个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 的字典解包。
我的问题是一般性的:是否有一种干净的方法来执行条件解包?
到目前为止,我找到的唯一选择是:
aggregate: bool
builder: GetBuilder | AggregateBuilder
if aggregate:
builder = builder.with_hybrid(settings)
else:
builder = builder.with_hybrid(**settings)
高效、清晰,但我觉得多余
aggregate: bool
builder: GetBuilder | AggregateBuilder
builder = eval("builder.with_hybrid({}settings)".format("**"*(not aggregate)))
可以工作,但不清楚,并且 eval 函数使用起来感觉不对
还有其他方法可以干净地执行条件解包吗?
我觉得选项 1 不错。如果您想对
builder.with_hybrid()
进行一次呼叫,您可以执行以下操作:
if aggregate:
args, kwargs = [settings], {}
else:
args, kwargs = [], settings
builder.with_hybrid(*args, **kwargs)