簡體   English   中英

time.time()不計時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM