Python Glossary English

все Python 3astпонятие

ast.IsNot

операторы

Маркер сравнения is not в дереве ast: лежит в поле Compare.ops и полей не имеет.

Синтаксис

ast.IsNot()

Два слова — один токен-оператор: 'a is not b' даёт Compare с IsNot, а 'not a is b' — UnaryOp(Not) над Compare с Is; результат одинаков, но правило линтера, ищущее IsNot, второе написание не увидит. Это не то же, что 'a is (not b)': там справа UnaryOp. Узлы-маркеры сравнивают по типу (isinstance), а не через ==: у узлов ast нет __eq__, и ast.IsNot() == ast.IsNot() — False.

Примеры

import ast
print(type(ast.parse('a is not b', mode='eval').body.ops[0]).__name__)  # → IsNot
c = ast.parse('a is (not b)', mode='eval').body
print(type(c.ops[0]).__name__, type(c.comparators[0]).__name__)  # → Is UnaryOp

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности