Python модуль ast (gast) - несколько копий одного и того же объекта - PullRequest
3 голосов
/ 13 апреля 2020

Я пропустил следующий код через gast.parse и попытался увидеть разные объекты имен

def foo(n:int)->int:
  if n > 0:
    return 1
  elif n < 0:
    return -1
  else:
    return 0

Вот что я получил в качестве вывода

function arg: <gast.gast.Name object at 0x7f84c085b3c8> , name= n
compare sees: <gast.gast.Name object at 0x7f84c085b550> , name= n
compare sees: <gast.gast.Name object at 0x7f84c085b780> , name= n

Есть ли способ, которым я можно заставить его использовать таблицу символов и дать мне один и тот же объект для того же символа? (Не только для именованных объектов, но и для других)

Редактировать: Использование gast (не ast). Но с ast также наблюдается похожее поведение (каждое использование является новым объектом). Полный код для генерации:

import gast as ast
code = '''
def foo(n:int)->int:
  if n > 0:
    return 1
  elif n < 0:
    return -1
  else:
    return 0
'''
module = ast.parse(code)

class Visitor(ast.NodeVisitor):
  def visit_FunctionDef(self, node):
    print("function arg:", node.args.args[0], ", name=", node.args.args[0].id)
    for stmt in node.body:
      self.visit(stmt)
  def visit_Compare(self, node):
    print("compare sees:", node.left, ", name=", node.left.id)

Visitor().visit(module)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...