Python进阶之-ast使用详解

✨前言:

🌟什么是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版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天Aileft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值