布尔函数: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 语句或简单返回的主要内容,如果未能解决你的问题,请参考以下文章

Java布尔返回if语句[重复]

为啥这个 if 语句不返回布尔值?

布尔测试函数重写

布尔函数参数和返回

Lua,if语句成语无法返回正确的布尔值

java if 语句默认