Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python返回函数结果_Python_Performance - Fatal编程技术网

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
通常不需要它自己的函数,所以我猜这里没有演示您的实际问题。一般来说,如果不需要,不要使用临时变量,也不要事先考虑这些细节。编写可读的源代码,最后使用探查器找出优化代码的位置和方式。