有人能解释一下为什么会发生这种情况吗?
当我定义这个函数后按下回车键,需要大约半分钟才能回到提示符。然后会显示:
为什么会发生这种情况?函数体被预编译或优化了吗?
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
为什么会发生这种情况?函数体被预编译或优化了吗?