Синтаксическая ошибка Python при использовании if в той же строке

#python

#python

Вопрос:

Должно быть, я делаю что-то глупое, но я просто не вижу этого. Я не смог заставить работать следующий простой код.

 >>> def a_bigger_than_b(a,b):
...   'Yes' if a > b
  File "<stdin>", line 2
    'Yes' if a > b
                 ^
SyntaxError: invalid syntax
 

Комментарии:

1. Нашел это , и я согласен с ним

Ответ №1:

 def a_bigger_than_b(a,b):
...   return 'Yes' if a > b else 'No!'
 

На самом деле вы используете его, поскольку Ternary Operator в таком случае вам нужно еще

я думаю, вы должны указать еще, что это может быть хорошо понято

Первый

 c='Yes' if a > b
 

каким будет значение для a, если a меньше b, этот случай неоднозначен, поэтому else должен

правильный синтаксис

 c='Yes' if a > b else 'No!'
 

Подробное объяснение было дано здесь

 *On 9/29/2005, Guido decided to add conditional expressions in the
    form of "X if C else Y".

    The motivating use case was the prevalance of error-prone attempts
    to achieve the same effect using "and" and "or".

    Previous community efforts to add a conditional expression were
    stymied by a lack of consensus on the best syntax.  That issue was
    resolved by simply deferring to a BDFL best judgment call.*
 

Комментарии:

1. Очень удивлен, что у меня не может быть автономного if, спасибо за ваш ответ. Просто попробовал, что у меня даже не могло быть пустого else. Я действительно не понимаю, почему это делается таким образом.

2. Могу ли я ничего не делать, если a меньше b? Я не использовал переменную thou

3. У вас может быть if без else , но нет необходимости иметь его в однострочном.

4. @AskandLearn Вы должны различать if in тернарный оператор и if оператор управления as. В последнем случае, конечно, вы можете опустить else .

5. @glglgl да, я не знал, что троичный оператор в python такой. Теперь я это знаю и запомню.

Ответ №2:

Ваш синтаксис немного напоминает мне Perl.

Я не уверен, чего именно вы хотите

 def a_bigger_than_b(a,b):
    'Yes' if a > b
 

что делать; существует несколько возможных интерпретаций.

Среди уже упомянутых вы также можете захотеть

 def a_bigger_than_b(a, b):
    if a > b: return 'Yes'
 

который ничего не делает в <= случае и в конечном итоге достигает конца функции, где (неявно) None возвращается.

Это однострочный синтаксис для Python, полностью эквивалентный do_whatever if foo синтаксису в Perl.

Имейте в виду, что функция всегда должна возвращать значение; если вы не делаете этого явно, None возвращается неявно.

Ответ №3:

Вы можете изменить оператор if на более простой:

 def a_bigger_than_b(a, b):
    return a > b and 'Yes'
 

Комментарии:

1. … в этом случае False возвращается if a <= b .

2. Да, но может быть изменено на что угодно, кроме False , например. a > b and 'Yes' or 'Noooo'

3. В этом случае да, но в общем случае a if b else c меньше, чем b and a or c . Если a значение false, вы получаете c , хотя b это true . (Как уже было сказано, это здесь не применимо, что 'Yes' и верно.)