Python 无法实现 timeit 模块

Python can't implement timeit module

这是一个基础练习。我只是不知道如何正确实现 timeit 模块。我一直收到语法错误

import timeit
import random
def bubblesort(LAux):
    for i in range(len(LAux)): 
    exchange = False 
    for j in range(len(LAux)-1): 
        if LAux[j] > LAux[j+1]: 
            tmp = LAux[j+1] 
            LAux[j+1] = LAux[j] 
            LAux[j] = tmp 
            exchange = True
    if not exchange: 
        break
return(LAux)

a=int(input("Size of list: "))
lst = [0]*a
for i in range(a):
    lst[i] = random.randint(1,100)
print(bubblesort(lst))
print(timeit.timeit()

您似乎误解了 timeit.timeit 的功能 - 这个想法是您告诉它实际计时的内容,然后它会计时。通常,它会做很多很多次计时的事情,因此您可以获得有意义的平均值。这意味着它还需要提供一个 'setup' 参数,因为每个测试的列表大概应该不同。如果需要,请参阅文档中的示例 - 我通常发现它们很容易满足您的目的。我在下面实现了 timeit:

a=int(input("Size of list: "))

n = 100000

setup = "lst = [random.randrange(100) for _ in range(a)]"
time = timeit.timeit("bubblesort(lst)", setup=setup, globals=globals(), number=n)

print("{} sorts took {}s".format(n, time))

当然,如果您使用 IPython,您可以这样做:

In [1]: from bubble import bubblesort

In [2]: from random import randrange

In [3]: %timeit bubblesort([randrange(100) for _ in range(50)])
10000 loops, best of 3: 175 µs per loop

也许您希望 timeit() 告诉您时间已经过去了多少。如果是这样,这可以使用 time 模块来完成,非常简单。

import time

start_time = time.time()
bubblesort(lst)
time_taken = time.time() - start_time
print("One sort took {}s".format(time_taken))

另一方面,我建议为参数使用不同的名称 "Laux"。如您所见,SO 的语法突出显示认为它是 class,因为通常以大写字母开头的任何内容都是 class。作为局外人,Laux 也没有特别告诉我它是什么,虽然我可以从名字 bubblesort 中推断出来。