我试图使用timeit来跟踪排序算法完成所需的时间。然而,似乎我甚至无法在网上找到一个答案,如何准确地运行时间与最初编写在另一个模块中的函数。我已经尝试了各种设置和字符串输入,但我发现自己迷失在这个。
我尝试使用"t = timeit.Timer('sort.bubble(temp_array)'),"但是打印出定时器对象只给我内存地址,不能转换为整数…
在这种情况下,我从另一个模块调用冒泡排序。
#This section is on a timetests.py file
import random
import sort
import timeit
test_array1 = [random.randint(0, 500) for i in range(10)]
arrays_to_sort = [test_array1]
bubble_times = []
for a in range(len(arrays_to_sort)):
temp_array = arrays_to_sort[a]
t = timeit(sort.bubble(temp_array))
bubble_times.append(t)
**t = timeit(sort.bubble(temp_array))** #code is definitely not correct here
#This file is on sort.py
def bubble(list):
for current_pass in range(len(list) - 1, 0, -1):
for element in range(current_pass):
#Swap the element if the current one is smaller than
#next one
if list[element] > list[element + 1]:
temp = list[element]
list[element] = list[element + 1]
list[element + 1] = temp
return list
您需要在本地环境中运行bubble和变量temp_array。
试题:
t = timeit.timeit("bubble(temp_array)", setup = "from sort import bubble; from __main__ import temp_array"),
bubble_times.append(t)
解释:
- 所以我们使用bubble(),因为这是访问导入函数的方式
- 如果您导入了排序模块而不是模块中的函数,则可以使用sort.bubble()
- 我们还必须引入temp_array(假设我们正在运行timetests.py作为主模块)
使用lambda函数
另一个选择是使用lambda创建一个零参数函数,并将其传递给timeit。注意:检查如何在使用timeit.Timer()
时传递函数的参数t = timeit.timeit(lambda: sort.bubble(temp_array))