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

vil*_*ric 8 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"
Run Code Online (Sandbox Code Playgroud)

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

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

    return "something"
Run Code Online (Sandbox Code Playgroud)

Joh*_*ooy 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        
Run Code Online (Sandbox Code Playgroud)


WLi*_*Lin 5

这已经在这里讨论过:If-Else-Return 还是只是 if-Return?

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

就我个人而言,为了可读性,我更喜欢使用else语句。


jgr*_*tty 1

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

\n\n

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

\n\n

Je pr\xc3\xa9f\xc3\xa8re cette derni\xc3\xa8re

\n