马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
抽象语法树(Abstract Syntax Tree,简称 AST)是源代码的树状表现,展示了代码的语法结构。在 Python 中,ast 模块可以资助你剖析和操纵 Python 代码的 AST。
1. 使用 ast 模块剖析 Python 代码
我们可以使用 ast.parse 将一段 Python 代码剖析为 AST,然后使用 ast.dump 查察其结构。- import ast
- # 示例代码
- code = """
- def add(a, b):
- return a + b
- result = add(5, 3)
- print(result)
- """
- # 解析代码为 AST
- tree = ast.parse(code)
- # 打印 AST 的结构
- print(ast.dump(tree, indent=4))
复制代码 输出示例:- Module(
- body=[
- FunctionDef(
- name='add',
- args=arguments(
- posonlyargs=[],
- args=[
- arg(arg='a'),
- arg(arg='b')],
- kwonlyargs=[],
- kw_defaults=[],
- defaults=[]),
- body=[
- Return(
- value=BinOp(
- left=Name(id='a', ctx=Load()),
- op=Add(),
- right=Name(id='b', ctx=Load())))],
- decorator_list=[],
- type_params=[]),
- Assign(
- targets=[
- Name(id='result', ctx=Store())],
- value=Call(
- func=Name(id='add', ctx=Load()),
- args=[
- Constant(value=5),
- Constant(value=3)],
- keywords=[])),
- Expr(
- value=Call(
- func=Name(id='print', ctx=Load()),
- args=[
- Name(id='result', ctx=Load())],
- keywords=[]))],
- type_ignores=[])
复制代码 2. 遍历 AST
你可以编写一个访问者(Visitor),遍历 AST 的各个节点,并对特定范例的节点举行处置处罚。比方,下面的代码将遍历 AST 并打印出全部函数界说的名称:- import ast
- class FunctionNameLister(ast.NodeVisitor):
- def visit_FunctionDef(self, node):
- print(f"Function name: {node.name}")
- # 继续遍历函数内部的节点
- self.generic_visit(node)
- # 示例代码
- code = """
- def add(a, b):
- return a + b
- def subtract(a, b):
- return a - b
- """
- # 解析代码为 AST
- tree = ast.parse(code)
- # 创建访问者并遍历 AST
- lister = FunctionNameLister()
- lister.visit(tree)
复制代码 输出:- Function name: add
- Function name: subtract
复制代码 |