You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有类似Perl B::Concise的工具来输出Python optree?

查看Python的操作树/字节码结构的方法

当然有啦!Python生态里有不少工具能帮你查看类似Perl B::Concise那样的底层操作结构,下面给你几个实用的选项:

1. 官方自带的dis模块(反汇编字节码)

这是Python内置的最常用工具,能把代码编译后的字节码反汇编成人类可读的指令,虽然和Perl的op树格式不完全一致,但能清晰看到代码的底层执行步骤。

比如运行这个命令查看not a and not b的字节码:

python -c "import dis; dis.dis('not a and not b')"

输出大概是这样:

1           0 LOAD_NAME                0 (a)
              2 UNARY_NOT
              4 POP_JUMP_IF_FALSE       14
              6 LOAD_NAME                1 (b)
              8 UNARY_NOT
             10 POP_JUMP_IF_FALSE       14
             12 RETURN_VALUE
        >>   14 LOAD_CONST               0 (False)
             16 RETURN_VALUE

每一行的数字代表字节码偏移量、指令名称和操作数,能对应到代码的执行逻辑:先加载a取反,若为假则跳转到加载False;否则加载b取反,同样判断后返回结果。

2. ast模块(抽象语法树)

如果想要看语法层面的操作树,可以用Python的ast模块,它会把代码解析成结构化的语法节点树,比字节码更贴近代码的语法结构。

运行这个命令:

python -c "import ast; print(ast.dump(ast.parse('not a and not b'), indent=2))"

输出会是结构化的语法树:

Module(
  body=[
    Expr(
      value=BoolOp(
        op=And(),
        values=[
          UnaryOp(
            op=Not(),
            operand=Name(id='a', ctx=Load())),
          UnaryOp(
            op=Not(),
            operand=Name(id='b', ctx=Load()))]))])

这个结构能清晰看到代码的语法层级:And操作包含两个Not操作,每个Not又对应一个变量加载,完全是树状的结构展示。

3. 第三方库bytecode(更友好的字节码处理)

如果你想要更结构化、可读性更强的字节码分析,可以用bytecode这个第三方库,它会把字节码封装成对象,方便查看操作的层级和细节。

首先安装库:

pip install bytecode

然后运行这段代码:

from bytecode import Bytecode, Instr

code = Bytecode.from_code(compile('not a and not b', '<string>', 'eval'))
for instr in code:
    print(instr)

输出会是更清晰的指令列表,每个指令都是一个对象,包含操作码和参数:

LOAD_NAME 'a'
UNARY_NOT
POP_JUMP_IF_FALSE 10
LOAD_NAME 'b'
UNARY_NOT
POP_JUMP_IF_FALSE 10
RETURN_VALUE
LOAD_CONST False
RETURN_VALUE

这个库还支持更深入的分析,比如控制流图,能帮你更直观地理解代码的执行路径。

总结

如果追求和Perl B::Concise最接近的操作树层级展示,ast模块的语法树输出会更贴合;如果想看实际执行的字节码指令,dis模块是最方便的官方工具;bytecode库则提供了更友好的字节码操作接口。

内容的提问来源于stack exchange,提问作者Evan Carroll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:26:50