用法:
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。