在python中显示运行时间的问题



函数time.time((有问题。我写了一个代码,它有3个不同的散列函数,然后计算它们执行的时间。

start_time = time.time()
arr.add(Book1, 1)
end_time = time.time()
elapsed_time = start_time - end_time
print(elapsed_time)

当我在pycharm/IDLE/Visual中执行此操作时,它显示0。当我在在线编译器中执行此操作时(https://www.programiz.com/python-programming/online-compiler/)它显示了一个良好的结果。为什么?

如果需要,这里是完整的代码。

import time

class Ksiazka:
def __init__(self, nazwa, autor, wydawca, rok, strony):
self.nazwa = nazwa
self.autor = autor
self.wydawca = wydawca
self.rok = rok
self.strony = strony
def hash_1(self):
h = 0
for char in self.nazwa:
h += ord(char)
return h
def hash_2(self):
h = 0
for char in self.autor:
h += ord(char)
return h
def hash_3(self):
h = self.strony + self.rok
return h

class HashTable:
def __init__(self):
self.size = 6
self.arr = [None for i in range(self.size)]
def add(self, key, c):
if c == 1:
h = Ksiazka.hash_1(key) % self.size
print("Hash 1: ", h)
if c == 2:
h = Ksiazka.hash_2(key) % self.size
print("Hash 2: ", h)
if c == 3:
h = Ksiazka.hash_3(key) % self.size
print("Hash 3: ", h)
self.arr[h] = key


arr = HashTable()
Book1 = Ksiazka("Harry Potter", "J.K Rowling", "foo", 1990, 700)
start_time = time.time()
arr.add(Book1, 1)
end_time = time.time()
elapsed_time = end_time - start_time
print(elapsed_time)

start_time = time.time()
arr.add(Book1, 2)
end_time = time.time()
elapsed_time = end_time - start_time
print(elapsed_time)
start_time = time.time()
arr.add(Book1, 3)
end_time = time.time()
elapsed_time = end_time - start_time
print(elapsed_time)

我看起来0可能只是成功执行脚本的返回值。您需要添加一个打印语句来显示任何内容。此外,您可能需要更改减法的顺序:

start_time = time.time()
arr.add(Book1, 1)
end_time = time.time()
elapsed_time = end_time - start_time
print(elapsed_time)

编辑更新问题的b/c:

如果它仍然显示0,那么您的添加操作可能非常快。在这种情况下,试着对几次运行进行平均,即使用这样的版本来代替添加操作:

start_time = time.time()
for _ in range(10**6):
arr.add(Book1, 1)
end_time = time.time()
elapsed_time = end_time - start_time
print(elapsed_time)  # indicates the average microseconds for a single run

time.time的文档中写道:

请注意,即使时间总是以浮点数字的形式返回,但并非所有系统都能提供比1秒精度更好的时间。虽然此函数通常返回非递减值,但如果系统时钟在两次调用之间被回拨,则它可以返回比前一次调用更低的值。

因此,根据您的操作系统,任何超过1秒的速度都可能显示为0的差异。

我建议您使用time.perf_counter

返回性能计数器的值(以秒为单位(,即具有最高可用分辨率的时钟,用于测量短持续时间。

最新更新