2013-07-20 17 views
2

我遇到了一個說Python code runs faster in functions的問題。所以我認爲將代碼分解成儘可能多的部分將是更快的方法。但是,當計時某些功能時,我發現它並不是真的正確。使用局部變量而不是全局變量在Python中獲得的性能優勢限制?

我不會在這裏發佈代碼爲it is currently placed for review at codereview。我仍然在想辦法做到最好的方式,因爲code is also placed for review at codereview,儘管有獎金,我仍然沒有得到很多答案。

我發現性能優勢不可能是無限的,必須有一個限制,即打破功能下降會停止提供性能優勢。

那麼,通過將Python代碼分解爲各種函數來實現性能優勢的限制是什麼?從性能的角度來看,何時將代碼分解爲不再有用的函數?

回答

2

由於訪問時間的緣故,代碼在函數中的運行速度比在全局範圍內快。一個函數有自己的作爲數組實現的局部作用域,而全局作用域實際上只是一個字典。數組訪問速度比字典快,這是在C層面下發生的。

這並不意味着將代碼分解爲許多函數會使其更快,它只意味着將代碼從全局移動到內部函數將改善訪問時間,這可能會導致整體速度提高。

即使您只是爲了使用局部作用域而不是全局作用而將所有代碼放在一個函數中,它也不能保證性能得到改進,只能通過實際分析代碼來確定性能改進。這是因爲函數調用在Python中的開銷相對較高,這可能會使本地訪問時間更快,從而使性能得到改善。

在您提供的first link頁面上有很多信息證實了這一點。

1

據我所知,性能提升只適用於全局變量被移入函數的本地範圍,因爲它提高了訪問時間。將你的代碼進一步分解爲更多的功能將不會提供任何類似的提升。