昨天同事在review代碼的時候,給我show了另外一個同事寫的神同樣的python代碼,基本上是list comprehension加巨複雜的filter,外加正則表達式,以及一個generator函數,而且在那個generator函數上還加了一個decorator,同事其實也寫了幾年python了,在review的時候仍是隻能一邊讀代碼,一邊查語法手冊。我大概看了下,貌似是爲了實現一個讀文件並解析的功能。python
我並不太清楚裏面太多的細節,只是以爲若是一件事情能夠用簡單的,順序的代碼完成的,那就別用一些太炫的技巧,什麼回調、對象、模式都會帶來必定的複雜性,提升編寫、閱讀和維護的成本,因此在你用牛刀的時候,保證躺在你刀下的是一頭牛,而不是一隻雞,否則,成本過高。正則表達式
而後,又發現其在搜索一個字符串的時候,直接用了re.search,而不是簡單直觀的string.find,明顯反直觀,和同事說了下,他說不必定,誰知道re.search作了什麼優化,致使他比string.search快,問題是一個複雜的算法,再優化也很難戰勝一個簡單的算法,string.find是一個極其簡單的線性算法,何況,你re.search能夠優化,string.find也能夠啊,測一下就知道了:算法
In [16]: str = 'use time.time to measure the time, which is the default on Unix : use time.time to measure the time, which is the default on Unix' In [17]: timeit str.find(':') 1000000 loops, best of 3: 388 ns per loop In [18]: timeit re.search(':', str) 100000 loops, best of 3: 2.06 us per loop
明顯str.find要快將近5倍。函數
因此很贊同一句話,學從難處學,用從易處用oop