gpt4 book ai didi

Python timeit 不工作?

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:28 26 4
gpt4 key购买 nike

谁能解释一下为什么会这样?

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 得到了完全相同的结果,但是 time 告诉我计算 10**10000000 需要超过 20 秒。如果我从解释器调用 timeit,也会发生同样的情况:

>>> t = time.time()
>>> print timeit.timeit('x = 10**10000000;', number=1)
5.00679016113e-06
>>> print time.time() - t
20.6168580055

为什么我的 timeit 不工作,或者我做错了什么?

附加信息:

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

当我在定义此函数后按回车键时,大约需要半分钟才能返回到提示符。然后:

>>> run()
2.14576721191e-06

为什么会这样?函数体是否以某种方式被预编译或优化?

最佳答案

我的猜测是问题在于您如何向 timeit 陈述问题。我认为发生的事情是在编译测试表达式时对表达式进行一次评估,然后在每个 timeit 循环中查看(而不是重新评估)。因此,目前您要衡量的只是完成分配而不是计算所花费的时间。

您需要每次都强制进行计算:

timeit.timeit('x = 10; y = 100; z = x ** y')

编辑:在回答您稍后的问题时,正在优化函数体。编译器看到 10*100000 并意识到它永远不会改变,因此在编译时而不是运行时计算它。

关于Python timeit 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5486272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com