我正在检查朋友的代码,每当他编写返回布尔值的函数时,这个模式就出现了很多:
def multiple_of_three(n):
if (n % 3) is 0:
return True
else:
return False
我认为写它更简单(也许更快):
def multiple_of_three(n):
return (n % 3) is 0
我是否认为第二次实施更快?此外,它是否不那么可读或以某种方式不赞成?
答案 0 :(得分:3)
我非常怀疑有一个编译器或解释器仍然存在明显的速度差异 - 大多数情况下会产生完全相同的代码。但是,在我看来,你的“直接回归”方法更清晰,更易于维护。
答案 1 :(得分:3)
我不能谈论Python解释器的确切行为,但仅仅出于“更快”的原因,那样做一种方式(在任何语言中)是错误的,并且有资格称为“过早”优化”。正如Paul Tomblin在另一个答案中所说,速度的差异(如果有的话)可以忽略不计。然而,通常的做法确实在这种情况下第二种形式更具可读性。如果表达式是隐式布尔值,则if语句包装器是无意义的。
另见http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
答案 2 :(得分:0)
第二种形式是首选形式。根据我的经验,第一种形式通常是缺乏经验的程序员的标志(这并不仅仅适用于Python - 这在大多数语言中都有用)。