Возможно ли множественное назначение переменных в троичном операторе в Python?

Просто из любопытства. Интересно, можно ли сделать несколько назначений с помощью троичного оператора в Python. Я думал о чем-то вроде этого

rval = m if (fl*fm) < 0 else lval = m

С другой стороны, мне интересно, почему невозможно написать код, как указано выше. Почему бы не реализовать Синтаксис таким образом? (Извините, если этот вопрос слишком мета)

РЕДАКТИРОВАТЬ:

уточнить. Я просто писал какую-то функцию деления пополам https://en.wikipedia.org/wiki/Bisection_method :

while(n_iterations < n_iters_max):
    m = (lival + rival)/2.0
    fm = f(m)
    if (fl*fm) < 0:
        rival = m
    else:
        lival = m

    if np.abs(rival-lival) < ival_size:
        break

    n_iterations+=1

Спасибо за любые идеи!

Всего 2 ответа


Вы могли бы сделать это:

(rval := m) if (fl*fm) < 0 else (lval := m)

Но обычный способ с оператором if-else более понятен (по крайней мере, на данный момент, пока мы все еще плохо знакомы с оператором := ) и более уместен (поскольку вы присваиваете здесь, что лучше является нормальным утверждением, чем выражением с побочными эффектами).


Дзен питона

Хотя мысль, стоящая за этим вопросом, должна искренне цениться и приветствоваться, наряду с умным и передовым решением @Heap Overflow - это кажется опасным путем для путешествий.

Вы правы, я не «Полиция Питона»; однако дзен Python говорит сам за себя в отношении этой реализации.

Явное лучше, чем неявное.
Простое лучше, чем сложное.
Читаемость имеет значение.
Должен быть один - и желательно только один - очевидный способ сделать это.
Если реализацию сложно объяснить, это плохая идея.

Чтобы сделать этот пост ответом, а не бессвязным, я буду ссылаться на цитату выше. Хотя мысль конечно интересная ...

«Это плохая идея» в Python.


Есть идеи?

10000