用法:
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 ast.NamedExpr用法及代碼示例
- Python ast.MatchClass用法及代碼示例
- Python ast.ListComp用法及代碼示例
- Python ast.Lambda用法及代碼示例
- Python ast.IfExp用法及代碼示例
- Python ast.Return用法及代碼示例
- Python ast.Subscript用法及代碼示例
- Python ast.alias用法及代碼示例
- Python ast.Slice用法及代碼示例
- Python ast.MatchAs用法及代碼示例
- Python ast.Try用法及代碼示例
- Python ast.MatchValue用法及代碼示例
- Python ast.Assert用法及代碼示例
- Python ast.Break用法及代碼示例
- Python ast.Load用法及代碼示例
- Python ast.Set用法及代碼示例
- Python ast.MatchStar用法及代碼示例
- Python ast.Expr用法及代碼示例
- Python ast.Attribute用法及代碼示例
- Python ast.ImportFrom用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 ast.NodeTransformer。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。