В чем разница между expr *, expr? и expr в Python3.6 AST абстрактная грамматика?

#python-3.x #abstract-syntax-tree

#python-3.x #абстрактное синтаксическое дерево

Вопрос:

В Python3.6 AST Abstract Grammar внутри есть expr* , expr? и expr . В чем разница между ними? Такие как: expr* targets , expr? value и expr target .

Ответ №1:

Обычно эти суффиксы означают то же самое, что и в регулярных выражениях:

  • expr — ровно один экземпляр выражения
  • expr? — ноль или один экземпляр
  • expr* — ноль или более экземпляров

Например, для следующего:

 FunctionDef(identifier name, arguments args,
            stmt* body, expr* decorator_list, expr? returns)
  

определение функции состоит ровно из одного имени, по крайней мере, нулевых операторов и необязательного возвращаемого значения asn (для функций, которые ничего не возвращают).