有人可以解釋爲什麼會發生這種情況嗎?Python時間不工作?
[email protected] ~ $ 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
[email protected] ~ $ 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
[email protected] ~ $ 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)
UPDATE:
這裏還有一個非常有趣的現象:
>>> def run():
... t = time.time()
... x = 10**10000000
... print time.time() - t
當我按下定義這個功能之後進入,它需要大約半分鐘直到我回到提示。然後:
>>> run()
2.14576721191e-06
爲什麼會發生這種情況?函數體是否被預編譯或優化?
你是對的,強迫計算髮生每次都會延長時間。我不知道Python會爲我預先計算表達式。 – 2011-03-30 13:02:28
@Attila - 我到現在都沒有。 – 2011-03-30 13:06:57