當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python ast.NodeTransformer用法及代碼示例


用法:

class ast.NodeTransformer

NodeVisitor 子類遍曆抽象語法樹並允許修改節點。

NodeTransformer 將遍曆 AST 並使用訪問者方法的返回值來替換或刪除舊節點。如果訪問者方法的返回值為 None ,則將節點從其位置移除,否則將其替換為返回值。返回值可能是原始節點,在這種情況下不會發生替換。

這是一個示例轉換器,它將所有出現的名稱查找(foo)重寫為 data['foo']

class RewriteName(NodeTransformer):

    def visit_Name(self, node):
        return Subscript(
            value=Name(id='data', ctx=Load()),
            slice=Constant(value=node.id),
            ctx=node.ctx
        )

請記住,如果您正在操作的節點有子節點,您必須自己轉換子節點或首先為節點調用generic_visit() 方法。

對於作為語句集合一部分的節點(適用於所有語句節點),訪問者還可以返回節點列表而不僅僅是單個節點。

如果 NodeTransformer 引入新節點(不屬於原始樹的一部分)但未提供位置信息(例如 lineno ),則應使用新的 sub-tree 調用 fix_missing_locations() 以重新計算位置信息:

tree = ast.parse('foo', mode='eval')
new_tree = fix_missing_locations(RewriteName().visit(tree))

通常你像這樣使用轉換器:

node = YourTransformer().visit(node)

相關用法


注:本文由純淨天空篩選整理自python.org大神的英文原創作品 ast.NodeTransformer。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。