" else之间有什么区别:return True"并且只是"返回True?"

时间:2017-06-17 19:18:38

标签: python

当我学习Python时,我遇到了一些不同的风格。我想知道使用" else"之间有什么区别?而不是仅仅将代码放在" if"之外。声明。为了进一步解释我的问题,下面是两段代码。

x = 5
if x == 5:
    return True
else:
    return False

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

x = 5
if x == 5:
    return True
return False

2 个答案:

答案 0 :(得分:6)

在您的代码中,没有任何区别,因为if部分以return结束,如果条件为真,则代码将以任何方式退出。如果条件为false,则else分支将被执行,也以return结束,因此不需要else

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

这里的关键点是当条件结尾的两个分支都带有return然后else不是强制性的。但如果情况并非如此,那么您需要使用else,否则您将最终执行非预期的代码。例如,您无法删除else

if n > 10:
  n = 1
else:
  n *= 10

答案 1 :(得分:5)

存在非常轻微的差异,但它是您实际上并不关心的。鉴于这两个功能:

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

def f2():
    x = 5
    if x == 5:
        return True
    return False

查看每个字节代码:

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

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

相关问题