Python троичный порядок операций - PullRequest
6 голосов
/ 08 апреля 2019
[on_true] if [expression] else [on_false]

Если expression равно False, все еще оценивается [on_true]?

Причина, по которой я спрашиваю, заключается в том, что у меня есть запрос ORM django в качестве [on_true], и я напишу это другимКстати, если он вычисляется каждый раз, когда запускается эта строка.

1 Ответ

10 голосов
/ 08 апреля 2019

После проверки истинности условия будет оцениваться только одна сторона условного выражения.Это гарантировано и задокументировано в справочнике по языку: https://docs.python.org/3/reference/expressions.html#conditional-expressions

Вы можете поместить любое выражение для мусора, чтобы убедить себя в этом:

>>> wtf.errorerror - error + 1/0 if False else "potato"
'potato'
...