这两个示例函数在性能方面有什么区别吗?如果是,为什么?
def func(a):
if a > 0:
num = 1
else:
num = -1
return num
和
def func(a):
if a > 0:
return 1
else:
return -1
请您参考如下方法:
如果您真的很感兴趣,可以使用 dis 了解函数的运行速度;更多的行可能更糟:
return 最后:
4 0 LOAD_FAST 0 (a)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 4 (>)
9 POP_JUMP_IF_FALSE 21
5 12 LOAD_CONST 2 (1)
15 STORE_FAST 1 (num)
18 JUMP_FORWARD 6 (to 27)
7 >> 21 LOAD_CONST 3 (-1)
24 STORE_FAST 1 (num)
8 >> 27 LOAD_FAST 1 (num)
30 RETURN_VALUE
11 行,相当快。
在:if中返回
13 0 LOAD_FAST 0 (a)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 4 (>)
9 POP_JUMP_IF_FALSE 16
14 12 LOAD_CONST 2 (1)
15 RETURN_VALUE
16 >> 16 LOAD_CONST 3 (-1)
19 RETURN_VALUE
20 LOAD_CONST 0 (None)
23 RETURN_VALUE
10 行,可能稍微快一些。
还有 thefourtheye 的建议:
def func(a):
return 1 if a > 0 else -1
给予:
21 0 LOAD_FAST 0 (a)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 4 (>)
9 POP_JUMP_IF_FALSE 16
22 12 LOAD_CONST 2 (1)
15 RETURN_VALUE
23 >> 16 LOAD_CONST 3 (-1)
19 RETURN_VALUE
8 行,获胜者(永远不会运行的两条行)!
但这绝对是你妈妈警告过你的过早优化!
