Поддерживает ли цепочка python цепочку is
операторов, таких как:
a = None
b = None
a is b is None
Это выводит True
, некоторые ссылки на doc будут приятными.
Поддерживает ли цепочка python цепочку is
операторов, таких как:
a = None
b = None
a is b is None
Это выводит True
, некоторые ссылки на doc будут приятными.
Да. Любые операторы, классифицированные как сравнения, могут быть связаны цепями. Из справочной системы :
Формально, если 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
, за исключением того, что каждое выражение оценивается не более одного раза.
Операторы сравнения: <
, >
, ==
, >=
, <=
, <>
(малоиспользуемый синоним для !=
, ушедший на Python 3), !=
, is
, is not
, in
и not in
.
Да. См. сравнительные документы.
Сравнение может быть скоблено произвольно, например, x < y <= z эквивалентно к x < y и y <= z, за исключением того, что y оценивается только один раз (но в обоих случаи z вообще не оцениваются, когда x < y считается ложным).
Формально, если a, b, c,..., y, z являются выражениями и op1, op2,..., opN являются операторами сравнения, то op1 b op2 c... y opN z эквивалентен к операциям op1 b и b op2 c и... y opN z, за исключением того, что каждое выражение оценивается не более одного раза.
Что делает оператор сравнения:
Операторы являются и не проверяются для идентичности объекта: x is y истинно тогда и только тогда, когда x и y - один и тот же объект. x не означает, что y обратное значение истинности.
Ссылка на документацию по грамматике Python, которая читается Python для разбора исходных файлов (поэтому это источник):
comparison: expr (comp_op expr)*
comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
expr (comp_op expr)*
следует читать, на простом английском языке, "любое количество выражений, разделенных оператором сравнения," из которых is
один. Это означает, что да, вы можете приковать любое число is
сравнение друг с другом.
Чтобы продемонстрировать, что сравнения связаны между собой:
>>> a = b = c = 'foo'
>>> a is b
True
>>> a is b is c
True
>>> True is c
False
Да, is
- оператор сравнения, а формальное описание цепочки находится в справочном руководстве.