Python返回函数结果
在速度和代码优化方面,什么更好?执行计算,将结果引用存储在本地并按如下方式返回引用:Python返回函数结果,python,performance,Python,Performance,在速度和代码优化方面,什么更好?执行计算,将结果引用存储在本地并按如下方式返回引用: def aplusb(a,b): result = a + b return result 或者返回计算直接返回给调用方的任何内容: def aplusb(a,b): return a + b 第一个执行另外两个字节码,一个用于存储结果,另一个用于再次检索结果: >>> def aplusb_local(a, b): ... result = a + b .
def aplusb(a,b):
result = a + b
return result
或者返回计算直接返回给调用方的任何内容:
def aplusb(a,b):
return a + b
第一个执行另外两个字节码,一个用于存储结果,另一个用于再次检索结果:
>>> def aplusb_local(a, b):
... result = a + b
... return result
...
>>> def aplusb_return(a, b):
... return a + b
...
>>> import dis
>>> dis.dis(aplusb_local)
2 0 LOAD_FAST 0 (a)
2 LOAD_FAST 1 (b)
4 BINARY_ADD
6 STORE_FAST 2 (result)
3 8 LOAD_FAST 2 (result)
10 RETURN_VALUE
>>> dis.dis(aplusb_return)
2 0 LOAD_FAST 0 (a)
2 LOAD_FAST 1 (b)
4 BINARY_ADD
6 RETURN_VALUE
在函数框对象中还需要多一点局部变量空间:
>>> aplusb_local.__code__.co_nlocals
3
>>> aplusb_return.__code__.co_nlocals
2
这里的差异非常微小;在我的Macbook Pro上拨打1000万次电话,相差0.038秒:
>>> from timeit import timeit
>>> timeit('aplusb(42, 81)', 'from __main__ import aplusb_local as aplusb', number=10**7)
1.0834476329619065
>>> timeit('aplusb(42, 81)', 'from __main__ import aplusb_return as aplusb', number=10**7)
1.045598166063428
这不是你应该优化的东西
优化可读性。理论上,您在第一个版本中执行了一些冗余的额外操作。实际上,这对你的程序的速度没有任何影响,但第二个版本更清楚。速度成本很可能是微不足道的,在这种情况下你根本不必担心。对于Python,通常应该使用可读性最好的选项。在Shell中“导入这个”
a+b
通常不需要它自己的函数,所以我猜这里没有演示您的实际问题。一般来说,如果不需要,不要使用临时变量,也不要事先考虑这些细节。编写可读的源代码,最后使用探查器找出优化代码的位置和方式。