一个朋友(一个低技能水平的娱乐性python脚本编写者)让我查看一些代码。我注意到他有7个单独的陈述,基本上都是这样说的。
if ( a and b and c):
do something
语句a、b、c都测试了它们是否相等或缺少设置值。当我查看它时,我发现由于测试的性质,我可以将整个逻辑块重新编写成两个分支,这两个分支的深度从来没有超过3次,而且很少超过第一级(首先进行最罕见的测试)。
if a:
if b:
if c:
else:
if c:
else:
if b:
if c:
else:
if c:
对我来说,从逻辑上看,如果你做的测试越少,越简单,失败越快,并且继续进行下去,那就应该越快。 我真正的问题是
1)当我说if和else时,if是否应该是真的,else是否会被完全忽略?
2)理论上
如果(a、b和c)
三个独立的if语句所需的时间是多少?
代码:
输出:
因此,尽管设置相同,但组合表达式的清理速度更快,因为它在堆栈上只留下一个值。
如果
if
语句的计算结果为true,则它将跳过else
括号中的所有内容。应该注意的是,担心这种问题,除非每一个程序执行数百万次,否则称为“过早优化”,应该避免。如果您的代码使用三个if (a and b and c)
语句更清晰,那么它们应该留在中。我认为单独的测试和单独的测试一样快。Python还使用了所谓的short-circuit evaluation。
这意味着对于
(a and b and c)
,如果a
是false
,那么b
或c
将不再被测试。类似地,如果你有一个
OR
表达式(a or b)
,并且a
是true
,则不会计算b
。综上所述,分句的失败速度不快。
相关问题 更多 >
编程相关推荐