✨前言:
🌟什么是ast?
ast模块在Python中用于将源码转换成抽象语法树(Abstract Syntax Trees,AST)。通过AST,我们可以读取、修改、分析Python代码。本质上,它将源码转化为树形结构,节点代表语法构造,如表达式、语句等。这对于编写代码分析、优化工具或自动代码生成等任务非常有用。
抽象语法树(AST)组成部分
Expression: 在Python的AST中,Expression节点表示一个表达式。这里,它是整个AST的根节点。Expression节点有一个body属性,用于存储表达式的主体。body=BinOp(…): body属性包含一个BinOp节点,表示一个二元操作(binary operation)。二元操作就是涉及两个操作数的运算,比如加法、减法等。left=Constant(value=2): 在BinOp节点中,left属性表示左侧的操作数。
🌟基本使用
首先,使用import ast命令导入ast模块。
⭐️例1:解析表达式
#!/usr/bin/env python
# coding=utf-8
"""
# @Time : 2024/5/4
# @Author : Summer
# @File : test
# @describe:
"""
import ast
expression = "(1 + 2) * 3"
tree = ast.parse(expression, mode='eval')
print(ast.dump(tree, indent=4))
# Expression(body=BinOp(left=BinOp(left=Constant(value=1, kind=None), op=Add(),
# right=Constant(value=2, kind=None)), op=Mult(), right=Constant(value=3, kind=None)))
该示例中,先通过ast.parse函数解析字符串表达式。mode='eval’表示这是一个表达式。然后利用ast.dump函数打印出该表达式的树形结构,indent=4参数使输出更加易于阅读。
Expression:表示这是一个表达式节点。在AST种,Expression用于包装一个表达式,这里它是根节点。
body:这是Expression节点的主体,它包含了真正的运算逻辑。
BinOp:代表二元操作的节点,即涉及两个操作数的运算。在这个例子中,有两层BinOp。
第一层BinOp(外层)代表乘法操作(Mult()),它的两个操作数分别是: left=BinOp()
(内层):这个代表加法操作(Add())。具体包含: left=Constant(value=1,
kind=None):这是一个常量节点,表示整数1。 right=Constant(value=2,
kind=None):这也是一个常量节点,表示整数2。 这表明内层BinOp表示的表达式是1 + 2。 第一层BinOp的另一个操作数是:
right=Constant(value=3, kind=None):这是一个表示整数3的常量节点。
op:这个属性表示操作类型,Add()是加法操作,Mult()是乘法操作。 因此,这整个Expression节点表示的表达式是:(1 +
2) * 3。 kind=None:在Constant节点中,kind属性表示常量的字面种类。
⚠️注意:indent=4参数是python3.9版本之后引入的,需要注意自己的python版本。