2012-03-03 111 views
1

如果我有一個函數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 

之間的性能差異,如果翻譯已經像優化的情況下,我不知道這個?

+0

可能的重複[是否Python優化函數調用循環?](http://stackoverflow.com/questions/7243444/does-python-optimize-function-calls-from-loops) – delnan 2012-03-03 14:49:21

+1

另請注意,在命令式編程語言,多次調用具有相同參數的函數可能會有完全不同的效果。證明某些這樣的調用可以省略,可能需要大量的程序間分析,並且內聯它們需要早期綁定(Python中不存在*)和優化編譯器或JIT編譯器。 – delnan 2012-03-03 14:51:39

回答

5

CPython編譯器只做很少的簡單的peephole optimisations,但它肯定永遠不會優化掉一個函數調用 - 它如何知道函數是否有副作用?在編譯時,它通常不知道名稱bar引用哪個函數,並且名稱綁定可能隨時發生更改。

如果有疑問,只需自己測量性能 - timeit模塊是您的朋友。

相關問題