首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >time.time()不计时

time.time()不计时
EN

Stack Overflow用户
提问于 2013-01-28 07:16:24
回答 2查看 475关注 0票数 2

我在Windows7操作系统的WingIDE 101(版本4)上运行Python3.2。在这种情况下,环境并不重要,但我认为我应该具体一点。

我的代码如下。它并不意味着是最优的,只是找到质数的一种方法:

代码语言:javascript
运行
复制
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()函数似乎没有计时。当我运行这个程序时,我得到

代码语言:javascript
运行
复制
0.000000000000000
True

我也尝试了30位数字,所有的数字都是零。

考虑到我有多个For循环,我的程序不可能这么快。

我的问题是,为什么我的函数没有计时?或者如果是,为什么它这么快,而我知道它不应该是这样的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-28 07:29:31

在Windows上,您希望使用time.clock()time.time()只有1/60秒的粒度,而前者提供的是微秒级的粒度。

或者,要使其保持跨平台,请改用timeit.default_timer(),它将为您的平台使用正确的time函数:

代码语言:javascript
运行
复制
import timeit

start = timeit.default_timer()
票数 6
EN

Stack Overflow用户

发布于 2013-01-28 07:24:00

time.time()实际上并不能保证分辨率优于1秒。您将希望使用timeit模块,它具有更高的分辨率。

(编辑)

代码语言:javascript
运行
复制
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()行的代码,两个替代方法产生了类似的计时。另请参见How to use timeit correctly

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14553445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档