Как работает сравнение, если value1 == value2 не равно None в python? - PullRequest
0 голосов
/ 28 декабря 2018

Я обнаружил, что

a == b is not None

сравнивается a == b, и если оно истинно, то выполняется b is not None.

(a == b) is not None  

и

a == (b is not None)

Где я могу найти больше информации о таком поведении?Это довольно просто, но я ожидал, что True is not None будет выполнено

1 Ответ

0 голосов
/ 28 декабря 2018

Это задокументировано в справочнике по языку 6.10.Сравнения :

В отличие от C, все операции сравнения в Python имеют одинаковый приоритет, который ниже, чем у любой арифметической, сдвигающей или побитовой операции.Кроме того, в отличие от C, выражения типа a < b < c имеют интерпретацию, общепринятую в математике:

comparison    ::=  or_expr (comp_operator or_expr)*
comp_operator ::=  "<" | ">" | "==" | ">=" | "<=" | "!="
                   | "is" ["not"] | ["not"] "in"

Сравнения дают логические значения: True или False.

Сравнения могут быть связаныпроизвольно, например, x < y <= z эквивалентно x < y and y <= z, за исключением того, что y оценивается только один раз (но в обоих случаях z вообще не оценивается, когда x < y оказывается ложным).

Формально, если a , b , c , , y , z являются выражениями и op1 , op2 , , opN являются операторами сравнения, тогда a op1 b op2 c ... y opN z эквивалентно a op1 b and b op2 c and ... y opN z за исключением того, что каждое выражение оценивается не более одного раза.

Обратите внимание, что a op1 b op2 c не подразумевает какого-либо сравнения между a и c, так что, например, x < y > z идеальнодопустимо (хотя, возможно, не красиво).

Оба == и is not являются операторами сравнения, поэтому они объединяются в цепочки, как описано выше.

...