Я создаю приложение, для которого я хотел бы, чтобы наивный пользователь определил простую функцию. Затем я хотел бы взять эту функцию и преобразовать ее в абстрактное синтаксическое дерево. Это также должно работать во время интерактивного сеанса (то есть с использованием переводчика). Вот что я пробовал до сих пор в интерпретаторе:
dill.source.getsource
метод inspect.getsource
метод - доступ к атрибуту
__code__
объекта функции
Первые два метода проблематичны c, поскольку они необходимы для записи объекта функции в физический файл где-нибудь в системе. Третий дал мне только версию кода в байтовом коде, которую нельзя использовать в методе ast.parse
.
Я также открыт для преобразования объекта python непосредственно в абстрактный синтаксис, но, похоже, go против того, как астмы должны работать .
Мне действительно нужно иметь возможность получить аст от моего python объекта в обычном (не я python) интерпретаторе. Как я могу это сделать?
РЕДАКТИРОВАТЬ
Вот как мой "наивный пользователь" будет взаимодействовать с моей пользовательской библиотекой через интерпретатор:
>>> import MyLib
>>> def f(x): return x**2
>>> f = MyLib.FunctionAST(f) #FunctionAST will handld the conversion to abstract syntax