Python@TW: 會眾| IRC| Planet| 郵件列表| 聯絡我們

舉例,計算 standard deviation

   1 import math
   2 def standard_deviation(data):
   3     return math.sqrt(sum([d * d for d in data]) / len(data) - ((sum(data) / len(data)) ** 2))

還不如

   1 import math
   2 def standard_deviation(data):
   3     mean = sum(data) / len(data)
   4     pow2_mean = sum([d * d for d in data]) / len(data)
   5     variance = pow2_mean - (mean ** 2)
   6     return math.sqrt(variance)

假設之前沒看過 standard deviation 公式,雖然前面的 implementation 較簡短,但後面的方式,對於讀者而言,更容易理解。這也是為什麼 Sparse is better than dense 後面是接著 readability count 這一句,閱讀性必需擺在優先,除非該段程式碼有特別的 performance 需求。就算程式碼只有自己會看,但又如何保證自己回頭看時,不會忘了什麼是 standard_deviation ?把效能問題丟給 compiler 吧! 除非 compiler 無法產出可接受的效能。

另外,在 debug 時,如果公式的某一項出錯時,前面的寫法不容易 debug 。而後面的方式,因為每一項式都成獨立的一行,容易用 debugger 檢視,或者用 alert message 也很方便。

The Zen Of Python/Sparse is better than dense (上次是 localhost 在 2009-04-01 04:14:22 編輯的)