PEP308: каким должен тройной условный оператор в Python?

В comp.lang.python вовсю идет дискуссия о том, как должен выглядеть тройной условный оператор в Python и стоит ли его вообще вводить.

Предложение ввести в Python оператор вида cond ? if_true : if_false поступают давно и с завидной регулярность. Гвидо ван Россум всегда выступал против его введения, но недавно под давлением общественного мнения стал уступать. Однако его не устраивает исходная форма записи оператора, заимствованная из других языков ввиду ее неочевидности для новичков, незнакомых с такими языками. Это и породило дискуссию о том, как должен записываться оператор в языке Python.

Вот наиболее популярные варианты:

  • cond ? if_true : if_false
  • (if condif_true else: if_false) с обязательными скобками, чтобы отличать его от инструкции if.
  • cond then if_true else if_false

Немного предистории. Сейчас в языке существует множество способов в той или иной ступерь эмулировать условный оператор с помощью имеющихся средств. В вариантах (if_falseif_true)[cond] и {True: if_true, False: if_false}[cond] выражения if_true и if_false вычисляются всегда, даже если в этом нет необходимости. Тоже самое верно и для заранее определяемой функции вида iff(condif_trueif_false). Выражение cond and if_true or if_false не имеет этого недостатка, но дает не тот результат, если if_true может быть ложным. И только сложночитаемое (cond and [if_true] or [if_false])[0] и его вариации полностью эмулирую традиционный условный оператор.