time.time() 不计时
我在Windows 7系统上用WingIDE 101(版本4)运行Python 3.2。虽然环境不太重要,但我还是想具体说明一下。
我的代码如下。这段代码并不是最优的,只是找素数的一种方法:
def isPrime2(n):
if n == 1:
return False
count = 0
for i in range(2,n+1,2):
if n%i == 0:
count = count + 1
if count > 2:
return False
for i in range(1,n+1,2):
if n%i == 0:
count = count + 1
if count > 2:
return False
if count == 2:
return True
start = time.time()
x = isPrime2(571)
end = time.time()
time_interval = end - start
print("%1.15f"%time_interval)
print(x)
我遇到的问题是,time.time()这个函数似乎没有在计时。当我运行这个程序时,我得到了
0.000000000000000
True
我还尝试过计算到30位数字,结果都是零。
考虑到我有多个For循环,我的程序不可能这么快。
我想问的是,为什么我的函数没有被计时?或者如果有计时的话,为什么速度这么快,明明不应该这样?
2 个回答
1
time.time()
这个函数其实并不能保证时间的精确度超过1秒。如果你需要更精确的时间测量,建议使用 timeit
模块,它的精确度更高。
(编辑)
Examples of alternative usages for `timeit`:
n = 10000
# Method 1: using default_timer()
start = timeit.default_timer()
for i in range (n):
x = isPrime2(571)
end = timeit.default_timer()
time_interval = (end - start)/n
print("%1.15f"%time_interval)
# Method 2: using timeit()
print("%1.15f"%(timeit.timeit('isPrime2(571)','from __main__ import isPrime2',number=n)/n))
print(x)
上面的代码替代了提问者代码中的 start = time.time()
这一行,使用这两种替代方法得到的时间结果是差不多的。你也可以查看 如何正确使用timeit。
7
在Windows系统上,你应该使用time.clock()
这个函数;因为time.time()
的精度只有1/60秒,而前者可以提供微秒级的精度。
如果你想让代码在不同的平台上都能用,建议使用timeit.default_timer()
,这个函数会根据你的系统自动选择合适的time
函数:
import timeit
start = timeit.default_timer()