在 class 函数上计时

timeit on a class function

我正在尝试对属于 class 的函数使用 timeit()。代码如下: 任何人都可以帮我解决这个问题吗?提前致谢。

from random import randrange
import timeit
class Bubbles:
    def __init__(self,nums):
        self._nums = nums
        
    def sorts(self):
        for i in range(len(nums)):
            for j in range(i,len(nums)-1-i):
                if self._nums[j] > self._nums[j+1]:
                    self._nums[j],self._nums[j+1] = self._nums[j+1],self._nums[j]
        return self._nums
        
if __name__ == '__main__':
    nums = [randrange(-100,100) for i in range(100)]  ###Small set of numbers
    large_nums = [randrange(-100000,100000) for i in range(100000)]  ##Large set of numbers
    bubble_small = Bubbles(nums)###instance of Bubbles class for small set                             
    bubble_large = Bubbles(large_nums)###instance of Bubbles class for small set       
    print(timeit.timeit("bubble_small.sorts()"))###Bubble sort small set of numbers
    print(timeit.timeit("bubble_large.sorts()"))###Bubble sort large set of numbers
    

The timeit.timeit() function 运行您在 stmt 参数中提供的代码,但 运行 不在同一范围内 不确定这是正确的词 作为你的其他代码。您可以在 stmt 中的定时代码 之前包含一个参数 setup,其中包含 运行 的代码,以便它可以导入模块等。这条语句,你还可以获得 timeit 从你的 __main__ 代码中导入内容,如下所示:

print(timeit.timeit("bubble_small.sorts()", "from __main__ import bubble_small"))
print(timeit.timeit("bubble_large.sorts()", "from __main__ import bubble_large"))

由于您的代码需要相当长的时间来执行,因此可能值得使用 number=100(或一些适当大小的整数)参数来指定您想要计时的 运行 的数量 timeit()

print(timeit.timeit("bubble_small.sorts()", "from __main__ import bubble_small", number=100))
print(timeit.timeit("bubble_large.sorts()", "from __main__ import bubble_large", number=100))