Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python int(原始输入()和手动将原始输入()转换为int)的执行时间_Python_Datetime_Execution Time - Fatal编程技术网

Python int(原始输入()和手动将原始输入()转换为int)的执行时间

Python int(原始输入()和手动将原始输入()转换为int)的执行时间,python,datetime,execution-time,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

这是我的密码

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
您会发现,对于单个数字输入,您的方法更快:

>>> 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倍。

是的,这是IPython非常方便的
%timeit