在python中,探讨if else和if 的效率问题。
比如下面2个python 自定义函数
def get_sum(a,b):
if a > b:
return a+b
else:
return a+b
def get_sum_no_else(a,b):
if a > b :
return a+b
return a+b
通过引入 dis模块,进行字节码编译,分别得到如下结果:
- dis.dis(get_sum)
dis.dis(get_sum)
2 0 LOAD_FAST 0 (a)
2 LOAD_FAST 1 (b)
4 COMPARE_OP 4 (>)
6 POP_JUMP_IF_FALSE 16
3 8 LOAD_FAST 0 (a)
10 LOAD_FAST 1 (b)
12 BINARY_ADD
14 RETURN_VALUE
5 >> 16 LOAD_FAST 0 (a)
18 LOAD_FAST 1 (b)
20 BINARY_ADD
22 RETURN_VALUE
24 LOAD_CONST 0 (None)
26 RETURN_VALUE
- dis.dis(get_sum_no_else)
dis.dis(get_sum_no_else)
7 0 LOAD_FAST 0 (a)
2 LOAD_FAST 1 (b)
4 COMPARE_OP 4 (>)
6 POP_JUMP_IF_FALSE 16
8 8 LOAD_FAST 0 (a)
10 LOAD_FAST 1 (b)
12 BINARY_ADD
14 RETURN_VALUE
9 >> 16 LOAD_FAST 0 (a)
18 LOAD_FAST 1 (b)
20 BINARY_ADD
22 RETURN_VALUE
可以看到,没有else少了2段字节码:
24 LOAD_CONST 0 (None)
26 RETURN_VALUE
所以在字节码越少效率越高的前提下,if的效率比if else的效率更高。