将ast模块的抽象语法树转换为新的Python文件。
我正在使用Python中的'ast'模块来创建一个抽象语法树(AST)。我想编辑这个语法树(我用的是'ast.NodeTransformer'来编辑),然后把这个新的树写入一个新的Python文件。根据网站"http://greentreesnakes.readthedocs.org/en/latest/index.html"的说法,似乎没有办法在不使用第三方包的情况下做到这一点。这是真的吗?还是说我可以用'ast'模块把AST写入一个新的Python文件?如果可以的话,我该怎么做?看起来'ast'模块应该是支持这个功能的。
1 个回答
2
你需要一个叫做 codegen.py
的第三方模块,但这个模块其实只是利用了Python自带的AST工具,使用起来非常简单。接下来,你可以使用内置的 ast.NodeTransformer
工具来转换AST节点。
import ast
import codegen
class Visitor(ast.NodeTransformer):
def visit_Num(self, node):
return ast.Num(42)
x = Visitor()
t = ast.parse('x + y + z + 3')
out = x.visit(t)
print codegen.to_source(out)
# x + y + z + 42