当我学习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
答案 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
生成一对指令。