Python условие синтаксиса нерегулярности - PullRequest
0 голосов
/ 21 января 2020

Это действительно:

def not_none(some_variable) -> bool:
    return some_variable != None

И это также верно:

def not_none(some_variable) -> bool:
    return some_variable is not None

Почему это недействительно?

def not_none(some_variable) -> bool:
    return some_variable not None

Я думаю, что это означает то же, что и предыдущий.
Есть ли причина, по которой это запрещено?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Есть унарный not (принимает один операнд и отрицает его) и оператор is not (оптимизированный отрицание оператора is); однако нет бинарного not оператора (с двумя операндами).

1 голос
/ 21 января 2020

not является унарным оператором, он принимает только один аргумент (независимо от того, что справа). Сравните это с is not и !=, которые являются бинарными операторами, каждый из которых принимает два аргумента.

Это проблема, потому что с not вы, по сути, имеете

return (someVariable) (not None)

Но это не имеет смысла. someVariable просто плавает там до вызова not. Он не понимает, что вы намереваетесь, поэтому вы получаете ошибку.

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