Можно ли выполнить условную распаковку в Python?Python

Программы на Python
Anonymous
Можно ли выполнить условную распаковку в Python?

Сообщение Anonymous »

В настоящее время я создаю интерфейс между несколькими API в проекте Python.
на самом деле, в какой-то момент мне нужно вызвать метод из объекта «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)
Обратите внимание, что единственная разница между этими двумя синтаксисами — это распаковка dict для GetBuilder.
Мой вопрос общий: существует ли чистый способ выполнить условную распаковку?
Пока я нашел только следующие варианты:
1 if - else

Код: Выделить всё

aggregate: bool
builder: GetBuilder | AggregateBuilder

if aggregate:
builder = builder.with_hybrid(settings)
else:
builder = builder.with_hybrid(**settings)
Эффективно, понятно, но я считаю, что это излишне
2 с использованием eval

Код: Выделить всё

aggregate: bool
builder: GetBuilder | AggregateBuilder

builder = eval("builder.with_hybrid({}settings)".format("**"*(not aggregate)))
Работает, но непонятно, и функцию eval просто неудобно использовать.
Есть ли другой способ аккуратно выполнить условную распаковку?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python

Вернуться в «Python»