2010-06-22 3 views
67

C и многие другие языки имеют оператор conditional (aka ternary). Это позволяет сделать очень тонкий выбор между двумя значениями, основанными на истине условия, что делает выражения, в том числе присвоения, очень краткими.python? (условный/тройной) оператор для присвоений

Я скучаю, потому что я считаю, что мой код имеет много условных заданий, которые занимают четыре строки в Python:

if condition: 
    var = something 
else: 
    var = something_else 

В то время как в C было бы:

var = condition? something: something_else; 

Один или два раза в файле это нормально, но если у вас много условных назначений, число строк взрывается и, что хуже всего, глаз привлекается к ним.

Мне нравится привязка условного оператора, потому что он держит вещи, которые я считаю нестратегическими, отвлекая меня, когда вы сбрасываете код.

Итак, на Python есть ли какие-либо трюки, которые вы можете использовать, чтобы получить назначение на одной строке, чтобы аппроксимировать преимущества условного оператора, как я их изложил?

ответ

128

Python имеет такой оператор:

variable = something if condition else something_else 

С другой стороны, хотя и не рекомендуется (см @ комментарий karadoc в):

variable = (condition and something) or something_else 
+8

Этот параметр "variable = condition и something or something_else" не работает. Например, «True, False или True» возвращает True, тогда как «True? False: True» вернет False. – karadoc

+0

Что-то или Something_else работает нормально? Например, если что-то было null, вы должны установить его в something_else? – Breedly

12

В старшем коде Python, вы можете увидеть трюк:

condition and something or something_else 

Однако это было заменено значительно превосходящим ... if ... else ... Конструкция:

something if condition else something_else 
+0

Почему бы не «вернуть, если не все», хотя? – Will

+4

@Will: Потому что «return if not whatever» не является синтаксически правильным Python? –

+0

@ Возможно, потому что вы не предоставляете 'else' часть? – glglgl

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