布尔函数:if 语句或简单返回
Posted
技术标签:
【中文标题】布尔函数:if 语句或简单返回【英文标题】:Boolean functions: if statements or simple return 【发布时间】:2011-04-05 07:36:03 【问题描述】:我正在检查一个朋友的代码,每当他编写返回布尔值的函数时,这种模式就经常出现:
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
我是否正确,第二个实现更快?另外,它的可读性降低了还是不受欢迎?
【问题讨论】:
第一个让我畏缩......我现在必须去咀嚼柠檬,只是为了证明我的牙齿边缘。 @Shog9:我就是这么觉得的(虽然我的反应不那么激烈),我基本上告诉我的朋友他在他的代码中放了太多三行代码。 【参考方案1】:我非常怀疑是否还有编译器或解释器存在显着的速度差异 - 大多数会在两种情况下生成完全相同的代码。但是在我看来,您的“直接返回”方法更清晰,更易于维护。
【讨论】:
我想知道性能,因为这种模式在他的代码中重复......就像 15 次。因此,如果差异很小,它可能会成为大量积压【参考方案2】:我不能谈论 Python 解释器的确切行为,但是仅仅出于“更快”的原因,以一种方式而不是另一种方式(在 任何 语言中)是被误导的,并且被称为“过早的”优化”。正如 Paul Tomblin 在另一个答案中所说,速度上的差异(如果有的话)是可以忽略不计的。然而,通常的做法确实规定,在这种情况下,第二种形式更具可读性。如果一个表达式是隐式的布尔值,那么 if 语句包装器是轻浮的。
另见http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
【讨论】:
【参考方案3】:第二种形式是首选形式。以我的经验,第一种形式通常是缺乏经验的程序员的标志(这不仅仅适用于 Python - 这在大多数语言中都会出现)。
【讨论】:
以上是关于布尔函数:if 语句或简单返回的主要内容,如果未能解决你的问题,请参考以下文章