int(raw_input()的执行时间和手动将raw_input()转换为int

时间:2014-04-24 09:24:24

标签: python datetime execution-time

这是我的代码

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

1 个答案:

答案 0 :(得分:3)

您使用错误的方法来计算时间差异。

使用timeit module代替;它为您的系统使用最佳时钟,为重复测试提供最佳循环实现,并禁用垃圾收集器以最大限度地减少系统进程波动。

使用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

但是,使用 large 输入字符串会将其减慢为爬行速度;我先尝试了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倍。