如果我有一个函数Python:多次使用相同的参数调用相同的函数,或将结果保存为中间值?
def bar(n):
return n**100
会不会有
for i in range(1000000):
x = bar(30)
# use x for something
和
x = bar(30)
# use x for something 1,000,000 times
之间的性能差异,如果翻译已经像优化的情况下,我不知道这个?
如果我有一个函数Python:多次使用相同的参数调用相同的函数,或将结果保存为中间值?
def bar(n):
return n**100
会不会有
for i in range(1000000):
x = bar(30)
# use x for something
和
x = bar(30)
# use x for something 1,000,000 times
之间的性能差异,如果翻译已经像优化的情况下,我不知道这个?
CPython编译器只做很少的简单的peephole optimisations,但它肯定永远不会优化掉一个函数调用 - 它如何知道函数是否有副作用?在编译时,它通常不知道名称bar
引用哪个函数,并且名称绑定可能随时发生更改。
如果有疑问,只需自己测量性能 - timeit
模块是您的朋友。
取决于实施。 Pypy在版本1.5中增加了loop invariant code motion。
可能的重复[是否Python优化函数调用循环?](http://stackoverflow.com/questions/7243444/does-python-optimize-function-calls-from-loops) – delnan 2012-03-03 14:49:21
另请注意,在命令式编程语言,多次调用具有相同参数的函数可能会有完全不同的效果。证明某些这样的调用可以省略,可能需要大量的程序间分析,并且内联它们需要早期绑定(Python中不存在*)和优化编译器或JIT编译器。 – delnan 2012-03-03 14:51:39