все Python 3astпонятие
ast.In
операторы
Маркер сравнения in в дереве ast: лежит в поле Compare.ops и полей не имеет.
Синтаксис
ast.In()
'x in y' — сравнение (Compare), а не вызов; 'x not in y' — один оператор NotIn, тогда как 'not x in y' — UnaryOp(Not) над Compare с In: смысл тот же, деревья разные. Ключевое слово in в заголовке for оператором In не является — это часть узла For. Узлы-маркеры сравнивают по типу (isinstance), а не через ==: у узлов ast нет __eq__, и ast.In() == ast.In() — False.
Примеры
import ast
print(type(ast.parse('x in y', mode='eval').body.ops[0]).__name__) # → In
print(type(ast.parse('x not in y', mode='eval').body.ops[0]).__name__) # → NotIn
print(type(ast.parse('not x in y', mode='eval').body).__name__) # → UnaryOp
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности