2013-03-20 2 views
1

Кажется, я помню аббревиатуру для тестирования тернарного оператора на существование. Например:Аббревиатура для тройного оператора в python

a = None 
b = a if a else 'Not None!' 
# b is now 'Not None!' 

Я думал, что это было что-то вроде этого

a else 'Not None!' 

, но это не работает. Возможно, есть еще один способ сократить это, используя другой встроенный тип?

+0

^Это должно быть очевидно. Опубликовать в качестве ответа? – astex

+2

Стоит отметить, что они * не * одинаковы в некоторых контекстах (где случай * else * оценивается как «False»), и вы всегда должны использовать тернарный оператор, если это то, что вы действительно хотите для удобочитаемости. Вы видите это в основном в старом коде, поскольку тернарный оператор не был в старых версиях Python. Сделать что-то короче не улучшает. –

+0

Возможно, вы думали об этом: 'cond и x или y' – jamylak

ответ

3

Нет, аббревиатуры нет.

Вы сейчас думаете о a or 'Not None!'?

И как примечание стороны: ... if ... else ... называется conditional expression; это a тернарный оператор, но также выражение SQL BETWEEN ... IN ....

1

Да, в вашем случае есть аббревиатура.

b = a or 'Not None!' 

почти эквивалентна

b = a if a else 'Not None!' 

Единственное отличие состоит в том, что a вычисляется один раз в первом случае, и в два раза в секунду. Значение, указанное в b, одинаково в любом случае.

Кроме того, поймите, что в любом коде вы можете получить неожиданные результаты, если a не является None, но все же False-y. Рассмотрим, что произойдет, если a - 0.0, например.

0

Это на самом деле не имеет смысла для меня

a = None 
b = a if a else 'Not None!' 

Вы настраиваете б к Not None! для любого ложного значения a (включая None)

Возможно, вы думали

a = None 
b = 'Not None!' if a is None else a 

что ли?

Во всяком случае, за исключением случаев, когда вы можете уйти с

b = a or 'Not None!' 

или

b = a and 'Not None!' 

кроме Там нет никакого способа, чтобы избежать упоминания a дважды

Смежные вопросы