如果没有必要,最好在Python中使用“else”吗?

时间:2013-02-13 00:36:46

标签: python coding-style

我实际上使用Python和Flask作为我的devblog。我知道根据语言的不同,建议使用明确的else,但这不是强制性的,但我不知道它在Python中是如何工作的。

例如,我有一个带有if的函数,如果该语句为真,则返回一些内容。因此,else不是必需的,因为有或没有它,执行继续正常。

def foo(bar):
    if not isinstance(foo, list):
        return "an error"
    else: # not necessary 
        return "something"

所以,我应该像这样使用它,或者像:

def foo(bar):
    if not isinstance(foo, list):
        return "an error"

    return "something"

5 个答案:

答案 0 :(得分:4)

在第一种情况下,Python会在函数末尾添加一个显式的return None - 尽管我们可以看到它并不是真正需要的。在第二种情况下它没有。

我认为else:没有任何优势

>>> import dis
>>> def f():
...  if 1>2:
...   return 2
...  return 3
... 
>>> def g():
...  if 1>2:
...   return 2
...  else:
...   return 3
... 
>>> dis.dis(f)
  2           0 LOAD_CONST               1 (1)
              3 LOAD_CONST               2 (2)
              6 COMPARE_OP               4 (>)
              9 POP_JUMP_IF_FALSE       16

  3          12 LOAD_CONST               2 (2)
             15 RETURN_VALUE        

  4     >>   16 LOAD_CONST               3 (3)
             19 RETURN_VALUE        
>>> dis.dis(g)
  2           0 LOAD_CONST               1 (1)
              3 LOAD_CONST               2 (2)
              6 COMPARE_OP               4 (>)
              9 POP_JUMP_IF_FALSE       16

  3          12 LOAD_CONST               2 (2)
             15 RETURN_VALUE        

  5     >>   16 LOAD_CONST               3 (3)
             19 RETURN_VALUE        
             20 LOAD_CONST               0 (None)
             23 RETURN_VALUE        

答案 1 :(得分:3)

这已经在这里讨论过:If-Else-Return or just if-Return?

基本上,这两种形式在效率方面是等价的,因为无论如何机器都必须跳跃。所以它归结为编码风格,你必须自己(或与你的团队)决定。

就个人而言,我更倾向于使用 else 语句来提高可读性。

答案 2 :(得分:1)

这真的没什么区别。无论哪种方式都会做同样的事情。

我更喜欢后者,因为它只是一行代码。

Jepréfèrecettedernière

答案 3 :(得分:0)

我对编程很陌生,在这个问题的背景下,我被提醒说,通常情况下我不确定是否应该使用“else”或“elif”,例如,在类似的场景中这一点。

1)

if numA < numB:
    print('numA is smaller')
elif numB < numA:
    print('numB is smaller')
else:
    print('both numbers are equal')

2)

 if numA < numB:
        print('numA is smaller')
 elif numB < numA:
        print('numB is smaller')
 elif numA == numB:
        print('both numbers are equal')

我认为这不会产生巨大的影响,或者我错了?在其他例子中,我认为第二种变体可能更“强大”。

答案 4 :(得分:0)

来自Chromium's样式指南:

返回后不要使用其他:

# Bad
if (foo)
  return 1;
else
   return 2;

# Good
if (foo)
  return 1;
return 2;

return foo ? 1 : 2;