Более одного if-else в одной строке, как их интерпретировать?

#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'