Python timeit不工作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python timeit不工作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1707字,纯文字阅读大概需要3分钟。
内容图文
有人可以解释一下为什么会这样吗?
aatiis@aiur ~ $time python /usr/lib64/python2.7/timeit.py -n 1 -- 'x = 10**1000'
1 loops, best of 3: 0.954 usec per loop
real 0m0.055s
user 0m0.050s
sys 0m0.000s
aatiis@aiur ~ $time python /usr/lib64/python2.7/timeit.py -n 1 -- 'x = 10**100000'
1 loops, best of 3: 0.954 usec per loop
real 0m0.067s
user 0m0.040s
sys 0m0.020s
aatiis@aiur ~ $time python /usr/lib64/python2.7/timeit.py -n 1 -- 'x = 10**10000000'
1 loops, best of 3: 0.954 usec per loop
real 0m20.802s
user 0m20.540s
sys 0m0.170s
我从timeit得到完全相同的结果,但时间告诉我,评估10 ** 10000000需要超过20秒.如果我从解释器调用timeit,也会发生同样的情况:
>>> t = time.time()
>>> print timeit.timeit('x = 10**10000000;', number=1)
5.00679016113e-06
>>> print time.time() - t
20.6168580055
为什么我的时间不起作用,或者我做错了什么?
附加信息:
>>> print sys.version
2.7.1+ (2.7:4f07cacb2c3b+, Mar 28 2011, 23:11:59)
[GCC 4.4.5]
>>> print sys.version_info
>>> sys.version_info(major=2, minor=7, micro=2, releaselevel='alpha', serial=0)
更新:
这是另一个非常有趣的观察:
>>> def run():
... t = time.time()
... x = 10**10000000
... print time.time() - t
当我在定义此功能后按Enter键时,大约需要半分钟才能返回提示.然后:
>>> run()
2.14576721191e-06
为什么会这样?函数体是以某种方式预编译或优化的吗?
解决方法:
我的猜测问题在于你如何说明问题的时间.我认为正在发生的事情是,在编译测试表达式时,表达式将被评估一次,然后只使用每个timeit循环查看(而不是重新评估).因此,目前您所测量的只是进行分配而不是计算所需的时间.
你需要强制计算每次都发生:
timeit.timeit('x = 10; y = 100; z = x ** y')
编辑:在回答您以后的问题时,正在优化功能体.编译器看到10 * 100000并意识到它不会改变,所以在编译时而不是运行时计算它.
内容总结
以上是互联网集市为您收集整理的Python timeit不工作?全部内容,希望文章能够帮你解决Python timeit不工作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。