#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
возвращается ifa <= 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'
и верно.)