почему «вернуть 100, если я <10 еще пройти» не является допустимым в Python? - PullRequest
5 голосов
/ 08 ноября 2010

All;

def foo(i):
    return 100 if i < 10 else pass
    return 200 if i < 20 else pass
    return 1

Почему это не работает в Python? Я полагаю, этот код может работать так же, как:

def foo(i):
    if i < 10:
        return 100
    elif i < 20:
        return 200
    else: 
        return 1

Спасибо!

Ответы [ 5 ]

20 голосов
/ 08 ноября 2010

В документации вы увидите, что "троичный оператор" должен выглядеть следующим образом:

conditional_expression ::=  or_test ["if" or_test "else" expression]
expression             ::=  conditional_expression | lambda_expr

и pass - это оператор , а не выражение

10 голосов
/ 08 ноября 2010

return 100 if i < 10 else pass

вы должны прочитать это как return (100 if i < 10 else pass), поэтому pass не является значением

9 голосов
/ 08 ноября 2010

прочитайте ваш код следующим образом:

return (100 if (i < 10) else pass)

pass не является значением, которое вы можете вернуть.Следующий код будет работать:

def foo(i):  
    return 100 if i < 10 else (200 if i < 20 else 1) 
2 голосов
/ 08 ноября 2010

pass - нулевая операция, т.е. когда она выполняется, ничего не происходит.Это полезно в качестве заполнителя, когда синтаксически требуется оператор, но не нужно выполнять код.Он не должен использоваться как часть какой-либо логики.

0 голосов
/ 08 ноября 2010

Вы должны прочитать свою функцию как

def foo(i):
    if i < 10:
        return 100
    else:
        return pass
    if i < 20:
        return 200
    else:
        return pass
    return 1

return 100 if i < 10 else pass - это не оператор "если", это троичный оператор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...