Возможно ли присвоение нескольких переменных в троичном операторе в Python? - PullRequest
2 голосов
/ 12 февраля 2020

Просто из любопытства. Интересно, можно ли сделать несколько назначений с помощью троичного оператора в 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 ]

2 голосов
/ 12 февраля 2020

Дзен Python

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

Вы правы, я не "Python Police"; однако дзен Python говорит сам за себя относительно этой реализации.

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

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

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

2 голосов
/ 12 февраля 2020

Вы можете сделать это:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...