在 if 语句之前计算比较值对计算时间有何影响?

How is computation time affected by calculating comparison values before if statements?

我目前正在python中编写一个模拟框架,然后将转移到C。

假设我需要 8 次比较才能进一步评估。

A=q<x<r
B=q<y<r
C=q<z<r
D=q<t<r

if C:
    if A:
        AC
    elif B:
        BC
    else:
        C
elif D:
    if A:
        AD
    elif B:
        BD
    else:
        D
elif A:
    A
else:
    B

A、B、C、D 都是布尔值。我认为这比为 A 调用 q<x<r、为 B 调用 q<y<r 等快得多。

我的问题是:

  1. if A:也叫比较吗?它有具体的名称吗?
  2. if A and C: 语句替换嵌套 ifs 如何影响计算时间?

如果我问了一个愚蠢的问题,我很抱歉,我现在不知道要搜索的关键字以检查是否重复。

提前致谢。

Is if A: also called a comparison? Does it have a specific name?

嗯,不知道有没有专门的名字。我将 A 称为恒等式表达式,If 语句计算其真值。至少最后一部分是 what the documentation calls it

How does replacing nested ifs with if A and C: statements impact the computational time?

Python 的字节码编译器没有做很多优化。你写的就是你得到的。一些例外情况适用,例如 while True 循环实际上并不测试 True 的真值,它只是编译为无限循环。

在您的情况下,您应该注意您进行了不一定需要的比较。如果 C 为真,则您不必测试 D。因此,只有在可以帮助您避免冗余比较的情况下才执行此类操作。

至于if A: if B:if A and B:的区别:有none,假设得到的控制流是一样的。请记住,布尔表达式是 short-circuited。在 Python 字节码中,两者大致如下所示:

LOAD_FAST 1 (A)
POP_JUMP_IF_FALSE <else-branch>
LOAD_FAST 2 (B)
POP_JUMP_IF_FALSE <else-branch>
<insert-if-branch-here>