11

我实际上将 Python 和 Flask 用于我的开发博客。我知道根据语言的不同,建议在else不是强制性的时候使用显式,但我不知道它在 Python 中是如何工作的。

if例如,如果语句为真,我有一个带有 a 的函数,它返回一些东西。因此, Theelse是不必要的,因为无论有没有它,执行都会正常继续。

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"
4

5 回答 5

6

在第一种情况下,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        
于 2013-02-13T01:08:07.117 回答
4

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

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

就个人而言,我更喜欢else语句以提高可读性。

于 2013-02-13T00:44:00.073 回答
1

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

我更喜欢后者,因为它少了一行代码。

Je préfère cette dernière

于 2013-02-13T00:40:42.780 回答
1

来自Chromium 的风格指南:

返回后不要使用else:

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

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

return foo ? 1 : 2;
于 2015-02-02T01:27:41.027 回答
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')

我认为这不会有很大的不同,还是我错了?我认为,在其他示例中,第二个变体通常可能更“稳健”。

于 2013-02-13T01:07:32.357 回答