2015-04-09 2 views
2

У меня есть три разных ответа на holiday_typeКак проверить одну строку, если еще, если иное условие в Python

holiday_type = Approved 
holiday_type = Confirmed 
holiday_type = both 

Python код:

result = ['confirm','validate'] if holiday_type == 'both' else ['confirm'] if holiday_type == 'Confirmed' else ['validate'] 

Результат:

['validate']    // Approved 
['confirm']     // Confirmed 
['confirm', 'validate']  // both 

Я не могу понять, как скомпилировать этот оператор if else: какой из них сначала ne второй. Не могли бы вы объяснить, как скомпилировать этот поток условий.

+2

Почему? Это не питонический. –

+0

Вызывает это pythonic ............, но я просто хочу знать поток этого выполнения. потому что для запуска цикла в конце. –

+0

Подсказка: 'result = ['confirm', 'validate'] if holiday_type == 'both' else (['confirm'], если holiday_type == 'Confirmed' else ['validate'])' - вы можете легко увидеть два вложенные аналогичные операторы формы 'true_val if condition else false_val'. –

ответ

0

Если го выражения различна для разных случаев, это было бы работы,

выражение1еслиcondition1ещеexpr2еслиcondition2ещевыраж

Например:

>>> a = -5 
>>> "negative" if a<0 else "zero" if a==0 else "positive" 
'negative' 
>>> a = 5 
>>> "negative" if a<0 else "zero" if a==0 else "positive" 
'positive' 
>>> a = 0 
>>> "Negative" if a<0 else "zero" if a==0 else "positive" 
'zero' 

Вопрос Пример:

result = ['confirm','validate'] if holiday_type == 'both' else ['confirm'] if holiday_type == 'Confirmed' else ['validate'] 
3

Не делайте этого. Показатели удобочитаемости.

if holiday_type == 'both': 
    result = ['confirm','validate'] 
elif holiday_type == 'Confirmed': 
    result = ['confirm'] 
else: 
    result = ['validate'] 
+2

это не отвечает на вопрос (хотя странное использование тройных операций - это действительный крик). Иногда вы читаете странный код других народов, поэтому вам нужно знать, как это работает, прежде чем реорганизовать его. – ideasman42

0

Это вложенная если-то еще

вообще говоря - x if cond else y нормальный синтаксис или тип заявления

теперь вот x и y может быть независимой набор операторов

Вы можете добавить их в список.

Как в вашем случае y это то же самое утверждение ->x if cond else y Таким образом, становится

x if cond else x1 if cond2 else y1

0
result = (['confirm','validate'] if holiday_type == 'both' else 
      ['confirm'] if holiday_type == 'Confirmed' else 
      ['validate']) 
2

Заявление

<expression1> if <condition> else <expression2> 

первым оценивает condition; если он вернется True, expression1 будет оценен, чтобы дать результат, в противном случае expression2.

В

result = ['confirm','validate'] if holiday_type == 'both' else ['confirm'] if holiday_type == 'Confirmed' else ['validate'] 

['confirm'] if holiday_type == 'Confirmed' else ['validate'] является expression2, и она будет оцениваться, если holiday_type == 'both' оценивается в False.

0

я собираюсь заимствовать у других, но дают более общие объяснения того, как анализировать эти oneline если заявления путем перевода его на несколько строк.

expr1 if condition1 else expr2 if condition2 else expr 

переводит

if condition1: 
    expr1 
elif condition2: 
    expr2 
else: 
    expr 

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

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