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)
在你的代码中,没有任何区别,因为如果条件为真,则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)
有一个非常小的差异,但它是你实际上不会关心的.鉴于这两个功能:
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.
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |