[英]time.time() not timing
我在WingIDE 101(版本4)的Windows 7操作系统上运行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循环,我的程序无法快速实现。
我的问题是,为什么我的功能没有定时? 或者如果是的话,为什么我知道它不应该如此之快?
在Windows上,您希望使用time.clock()
; time.time()
仅具有1/60秒的粒度,而前者则为您提供微秒的粒度。
或者,要使其跨平台,请改用timeit.default_timer()
,它将为您的平台使用正确的time
函数:
import timeit
start = timeit.default_timer()
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 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.