通过如下实验,发现String字符串不断 原地叠加在数量比较大时 耗时比较大。
见如下代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import timeit
NUM_LEN = 1000 #10000 # 100000 # 1000000 #
def std_str_add4int(num = NUM_LEN):
str_sum = ""
for i in xrange(num):
str_sum += "%05d\n"%i
return len(str_sum)
def pyc_str_add4int(num = NUM_LEN):
return len("\n".join(["%05d"%i for i in xrange(num)]))
if __name__ == '__main__':
test_methods = [std_str_add4int, pyc_str_add4int]
print NUM_LEN, ":"
for test in test_methods:
name = test.__name__ # test.func_name
t = timeit.Timer(name + '()', 'from __main__ import ' + name)
print(name + ' takes time : %f' % t.timeit(1))
当NUM_LEN分别为1000、10000、100000、1000000时,运行结果分别如下:
1000 :
std_str_add4int takes time : 0.000916
pyc_str_add4int takes time : 0.000467
1000 :
std_str_add4int takes time : 0.000693
pyc_str_add4int takes time : 0.000469
10000 :
std_str_add4int takes time : 0.006272
pyc_str_add4int takes time : 0.005265
100000 :
std_str_add4int takes time : 0.065305
pyc_str_add4int takes time : 0.054732
1000000 :
std_str_add4int takes time : 2.660269
pyc_str_add4int takes time : 0.582706
由上述执行时间,明显可知,发现String字符串不断 原地叠加在数量比较大时 耗时比较大。
可能原因:
1. 对1000000条进行叠加,std_str_add4int, pyc_str_add4int的操作数均为1000000,
但空间上,std_str_add4int方法使用的长度约为 1+2+3+ ...... + 1000000,比较复杂,
而pyc_str_add4int方法使用的是Python内部方法,可能比较节省空间。