这是我的代码
import datetime
n = raw_input()
print "aaa"
a = datetime.datetime.now()
for i in xrange(1,100000):
x = 0
for i in n:
x = ord(i)-48 + 10*x
b = datetime.datetime.now()
print x,b-a
n = raw_input()
print "aaa"
a = datetime.datetime.now()
for i in xrange(1,100000):
x = int(n)
b = datetime.datetime.now()
print x,b-a
在我的系统中,对于两个输入,我都得到了相同值5的不同时间,为什么我得到了不同的值,而且这些值的顺序不一致它与我在计算机中的输入打字时间或分支有什么关系吗
案例1:
5
aaa
5 0:00:00.112000
5
aaa
5 0:00:00.104000
案例2:
5
aaa
5 0:00:00.108000
5
aaa
5 0:00:00.140000
案例3:
5
aaa
5 0:00:00.114000
5
aaa
5 0:00:00.107000
案例4:
5
aaa
5 0:00:00.110000
5
aaa
5 0:00:00.124000
您对时间执行差异使用了错误的方法。
请改用timeit
模块;它使用最适合系统的时钟,使用最适合重复测试的循环实现,并禁用垃圾收集器以最大限度地减少系统进程波动。
使用timeit
,你会发现对于个位数输入,你的方法更快:
>>> import timeit
>>> def manual(n):
... x = 0
... for i in n:
... x = ord(i)-48 + 10*x
...
>>> def using_int(n):
... int(n)
...
>>> timeit.timeit('manual("5")', 'from __main__ import manual')
0.7053060531616211
>>> timeit.timeit('using_int("5")', 'from __main__ import using_int')
0.9772920608520508
但是,使用大的输入字符串会将其减慢为爬行;我先用1000个数字试了一下,但10分钟后就没耐心了。这只有50位数字:
>>> timeit.timeit('manual("5"*50)', 'from __main__ import manual')
15.68298888206482
>>> timeit.timeit('using_int("5"*50)', 'from __main__ import using_int')
1.5522758960723877
int()
现在以10倍的优势击败了手动方法。