在 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
等快得多。
我的问题是:
if A:
也叫比较吗?它有具体的名称吗?
- 用
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>
我目前正在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
等快得多。
我的问题是:
if A:
也叫比较吗?它有具体的名称吗?- 用
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>