将ast模块的抽象语法树转换为新的Python文件。

3 投票
1 回答
862 浏览
提问于 2025-04-17 21:51

我正在使用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

撰写回答