time.time() 不计时

3 投票
2 回答
1145 浏览
提问于 2025-04-17 13:52

我在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()

撰写回答