translation.backendopt.merge_if_blocks¶
- 名称: merge_if_blocks
- 描述: 合并 if … elif 链
- 命令行: –if-block-merge
- 命令行否定: –no-if-block-merge
- 选项类型: 布尔选项
- 默认值: True
此优化将来自 if 和 elif 链的流程图部分转换为合并的块。
默认情况下,这种代码的流程图
if x == 0:
f()
elif x == 1:
g()
elif x == 4:
h()
else:
j()
将导致一个带有两个出口的块链,有点像这样
(反映了 Python 如何解释这段代码)。运行此优化将转换块结构,使其包含一个带有四个出口的单个“选择块”
然后,这可以通过 C 后端转换为 switch,允许 C 编译器生成更有效的代码。