#python #python-3.x #if-statement
#python #python-3.x #if-оператор
Вопрос:
Ну, я, конечно, понимаю if-else, которые возвращаются в одной строке, например
return 0 if x==y else 1
Которые переводятся в
if x==y:
return 0
else:
return 1
Меня смущают те утверждения, где if-else встречается несколько раз в одной строке, например
def cmp(x, y):
return 0 if x == y else 1 if x > y else -1
Как интерпретировать и понимать операторы if-else, которые написаны в одной строке.
Ответ №1:
Введение круглых скобок облегчает понимание.
0 if x == y else 1 if x > y else -1
должно быть проанализировано как
0 if x == y else (1 if x > y else -1)
Комментарии:
1. Это отличный ответ, потому что он иллюстрирует, как все работает для еще более сложных выражений, таких как
A if cond1 else (B if cond2 else (C if cond3 else (D)))
, хотя обычно вам следует избегать подобных вещей, когда это возможно.2. @ChronoKitsune
though you should generally avoid things like that when possible
Верно, но когда я просматриваю большинство библиотек python, они заполнены такого рода инструкциями.3. @Rakesh_K Да, это правда. Если у вас есть длинные цепочки однострочных операторов if-else, подобных этому, обычно лучше повысить читаемость, сделав все более понятным. Согласно the Zen of Python (
import this
): «Разреженный лучше плотного» и «Если реализацию легко объяснить, это может быть хорошей идеей». Когда вы начинаете делать подобные вещи длиннее, они становятся более сложными, а это значит, что вы могли бы рассмотреть возможность их изменения, потому что «Простое лучше сложного» и «Важна читаемость». Иногда для сложности есть веские причины, поэтому Zen этого не запрещает.
Ответ №2:
это вложенный else-if , для наглядности его можно рассматривать следующим образом
if x == y:
return 0
else:
if x > y:
return 1
else:
return -1
и было бы здорово, если бы код был четким и понятен при меньших затратах возможных усилий
Итак, позже, что, если вы захотите добавить еще один случай в длинные условные операторы, тогда это может стать проблемой, поэтому лучшим вариантом будет использовать elif
лестницу, подобную этой
def _comp(total):
if total>90:
return 'Python lover'
elif total>80 and total<=89:
return 'Friend of python'
# elif total>50 and total<=79 added later easily
# return 'you like python' added later easily
else:
return 'python is waiting for you'