2016-08-14 340 views
0

我偶然發現了一些毫無意義的東西。我有這個Python代碼,它可以做2個簡單的for-loops,並且只是測量執行時間。但是,我發現從一個函數調用完全相同的代碼需要一半的時間。有人能解釋爲什麼嗎?相同代碼的Python不同性能

print "no function" 

start_time = time.time() 
for i in range(10000): 
    for j in range(10000): 
     z = i*j 
print z 
print("--- %s seconds ---" % (time.time() - start_time)) 

# VS 

def Function(): 
    start_time = time.time() 
    for i in range(10000): 
     for j in range(10000): 
      z = i*j 
    print z 
    print("--- %s seconds ---" % (time.time() - start_time)) 

print "Function Call" 
Function() 

這裏是輸出:

no function 
99980001 
--- 8.89359378815 seconds --- 
Function Call 
99980001 
--- 4.64798092842 seconds --- 
+0

如果沒有測試並且沒有受過教育的猜測,我會說接觸當地人要比全局更快,因爲他們可以有些優化(通過索引而不是名字進行處理)。 –

+0

區別在於變量的範圍和查找時間。 –

+0

你是對的,顯然這個問題已經在這裏得到解答了http://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-function – Alex

回答

1

PythonInSpeed website我們可以看到這一點:

在功能,局部變量比全局變量,建宏和屬性訪問更快速查找。所以,有時候值得在內部循環中對變量訪問進行本地化。例如,random.shuffle()的代碼使用random = self.random這一行本地化訪問。這樣可以避免重複查找self.random。在循環之外,增益很小,很少值得。