python (bool)? then: else синтаксис?

Возможный дубликат:
Терминальный оператор Python

На некоторых языках, включая Java, C / C ++, C # и т. Д., Вы можете назначить значение на основе результата встроенного булевого выражения.

Например,

return (i < x) ? i : x 

Это вернет i, если i <x, иначе оно вернет x. Мне это нравится, потому что во многих случаях он намного компактнее, чем более длинный синтаксис, который следует ниже.

 if (i < x) return i else return x 

Можно ли использовать этот синтаксис в python, и если да, то как?

4 Solutions collect form web for “python (bool)? then: else синтаксис?”

Вы можете использовать (x if cond else y) , например

 >>> x = 0 >>> y = 1 >>> print("a" if x < y else "b") a 

Это будет работать и лямбда-функция .

Да, это выглядит так:

 return i if i < x else x 

Он называется условным оператором в python.

Попробуйте это в Python:

 return i if i < x else x 

Это как раз эквивалент следующего выражения в Java, C, C ++ C #

 return i < x ? i : x; 

Подробнее о условных выражениях Python.

Как утверждают другие ответы, версия Python для этого:

i if i < x else x

(конечно, для этого конкретного примера можно было бы предпочесть записывать min(i, x) , поскольку это проще на глазах)

Однако синтаксис этого выражения был просто доступен на Python 2.5 (я думаю, что это было около 2004 года). до этого использовалась следующая идиома, но следует соблюдать осторожность, поскольку она подвержена ошибкам:

i < x and i or x – потому что логический оператор "и" фактически оценивает последнее истинное значение в своей цепочке – поэтому, если выражение было истинным, i < x and i оценивает i – и оператор or вычисляет первый истинное значение в цепочке. В этом случае, если i < x будет ложным, то i< x and i а первое истинное значение будет x .

Легко понять, насколько ошибкой является эта конструкция, поскольку если логическое значение i будет ложным (например, если i == 0), то оно вернет x, даже если i < x где true.

Я сам, в те времена, использовал для написания этой конструкции:

(x, i) [i <x]

Выражение «i <x» ha числовое значение «1» (true) или «0» (false), и я использовал этот метод, чтобы он работал как индекс предыдущего кортежа. Проблема с этим подходом заключалась в том, что он всегда оценивал оба выражения в кортеже, хотя он использовал бы один из них (если выражения, вызываемые функцией, могут стать дорогими или даже противоречивыми)

  • Изменение цвета фона оболочки python
  • Ошибка домена math в Python с использованием функции math.acos
  • Изменение значения переменной во внешней функции
  • Один лайнер, чтобы определить, являются ли значения словаря пустыми списками или нет
  • Вычислить площадь пересечения двух вращающихся прямоугольников в python
  • Нужна помощь для извлечения столбчатых данных
  • Python: напечатать выражение генератора?
  • Преобразование строки даты в YYYYMMDD
  • Python - лучший язык программирования в мире.