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