2015年3月20日 星期五

[python] String Format效能測試

目前使用兩種Format格式,

不太懂官方怎麼命名,

我就先用簡單的名詞代替:
1. format方法
2. 百分比%方法

我比較長用百分比方法,

直到最近工作有人提起才開始考慮到底要用哪種格式

雖然大家都說format方法比較好比較直覺,

但我還是覺得效能才是最優先的,

除非是有特殊需求,因此做了一下測試。

測試方法/結果:

1. timeit.timeit(stmt='_format.format(*_data)', setup='_format="{}:{}";_data=[1,2]', number=10000000)
2.4619

2.timeit.timeit(stmt='_format.format(**_data)', setup='_format="{a}:{b}";_data={"a":1, "b":2}', number=10000000)
2.1808

3.timeit.timeit(stmt='_format % (a, b)', setup='_format="%s:%s";a=1;b=2', number=10000000)
1.5782

4.timeit.timeit(stmt='_format % _data', setup='_format="%(a)s:%(b)s";_data={"a":1, "b":2}', number=10000000)
1.8673

5.timeit.timeit(stmt='_format += a + ":" + b', setup='_format="";a="1";b="2"', number=10000000)
1.3752

6.timeit.timeit(stmt='_format += str(a) + ":" + str(b)', setup='_format="";a=1;b=2', number=10000000)
3.7153

結論:

百分比的效能比較好點,尤其是在編排字串順序的時候。

但最近工作有遇到一種狀況是,可以提供客戶自行更改參數順序功能,

這時候反而覺得Format方法真的比較直覺,比較適合外部使用者,

因此最後結論為,若是自行開發需要用到時,最好用百分比,

而需要提供給外界提供格式的話,就採用Format方法。

當然如果真正要非常快的話還是直接字串相加了。

另外我也測試字串相加方法(第5和第6項),

很明顯的第5項效率比起第3項還要快,

但是若牽涉到轉型(數字轉文字)等等問題,

勢必還是要用百分比或是format要有效率多了。

沒有留言:

張貼留言