"else:return True"和"return True"之间有什么区别?

3 python

当我学习Python时,我遇到了一些不同的风格.我想知道使用"else"与使用"if"语句之外的代码之间的区别是什么.为了进一步解释我的问题,下面是两段代码.

x = 5
if x == 5:
    return True
else:
    return False
Run Code Online (Sandbox Code Playgroud)

据我所知,如果x!= 5,则返回False,但下面的代码如何与上面的代码形成对比?它是完全相同的,还是有细微的差别?使用一个比另一个好吗?

x = 5
if x == 5:
    return True
return False
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 6

在你的代码中,没有任何区别,因为如果条件为真,则if部分以a结尾return,并且代码将以任何方式退出.如果条件为假,则else执行分支,也以a结尾return,因此else不需要.

这是一个风格问题,但可以说第二种选择是首选,恕我直言更容易阅读,并且向右移动 - 实际上一些语言/编译器会用警告标记它,因为else这是不必要的.

这里的关键是,当条件结束的有两个分支return,则else不是强制性的.但如果情况并非如此,那么您需要使用else,否则您将最终执行非预期的代码.例如,在这里你不能删除else:

if n > 10:
  n = 1
else:
  n *= 10
Run Code Online (Sandbox Code Playgroud)

  • 我想这是因为你打印了函数返回的值,但是我的答案仍然适用 - 你不会以两个分支上的返回结束,如果你省略`你会得到不同的(通常是错误的)结果else`. (2认同)

che*_*ner 5

有一个非常小的差异,但它是你实际上不会关心的.鉴于这两个功能:

def f1():
    x = 5
    if x == 5:
        return True
    else:
        return False

def f2():
    x = 5
    if x == 5:
        return True
    return False
Run Code Online (Sandbox Code Playgroud)

查看每个产生的字节码:

>>> dis.dis(f1)
  4           0 LOAD_CONST               1 (5)
              2 STORE_FAST               0 (x)

  5           4 LOAD_FAST                0 (x)
              6 LOAD_CONST               1 (5)
              8 COMPARE_OP               2 (==)
             10 POP_JUMP_IF_FALSE       16

  6          12 LOAD_CONST               2 (True)
             14 RETURN_VALUE

  8     >>   16 LOAD_CONST               3 (False)
             18 RETURN_VALUE
             20 LOAD_CONST               0 (None)
             22 RETURN_VALUE
>>> dis.dis(f2)
 11           0 LOAD_CONST               1 (5)
              2 STORE_FAST               0 (x)

 12           4 LOAD_FAST                0 (x)
              6 LOAD_CONST               1 (5)
              8 COMPARE_OP               2 (==)
             10 POP_JUMP_IF_FALSE       16

 13          12 LOAD_CONST               2 (True)
             14 RETURN_VALUE

 14     >>   16 LOAD_CONST               3 (False)
             18 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)

对于第一个函数,Python仍然为无法访问的隐含生成一对指令return None.