2010-08-29 80 views
1

我检查了朋友的代码,这种模式出现了相当多的时,他写道:返回一个布尔值的函数:布尔函数:if语句或简单的返回

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 

我正确的是,第二个实施更快?另外,它的可读性还是稍逊一筹?

+1

第一个让我感到害怕......我现在必须去嚼柠檬,只是为了证明我的牙齿边缘。 – Shog9 2010-08-29 00:36:37

+0

@ Shog9:这就是我的感受(虽然我的反应不那么激烈),但我基本上告诉我的朋友,他的代码中有三行太多。 – 2010-08-29 00:37:49

回答

3

我非常怀疑有一个编译器或解释器仍然在那里存在显着的速度差异 - 大多数情况下都会生成完全相同的代码。但在我看来,你的“直接回报”方法更清晰,更易于维护。

+0

我想知道表现,因为这种模式在他的代码中重复...像15次。所以,如果有一个小的差异,它可能会成为一个重要的积压 – 2010-08-29 00:38:28

3

我不能说Python解释器的具体行为,但在另一个像这样做的一种方式(在任何语言)只是为“更快”的原因是错误的,并有资格作为“过早优化”。正如Paul Tomblin在另一个答案中所说的那样,速度的差异(如果有的话)是微不足道的。然而,通常的做法确实意味着这种情况下的第二种形式更具可读性。如果一个表达式是隐含的布尔值,那么if语句包装器是轻浮的。

参见http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize

0

第二种形式是优选的形式。根据我的经验,第一种形式通常是没有经验的程序员的标志(并且这不仅仅适用于Python--这在大多数语言中都会出现)。