【问题标题】:timeit on a class function类函数上的 timeit
【发布时间】:2021-07-21 02:49:48
【问题描述】:

我正在尝试在属于某个类的函数上使用 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
    

【问题讨论】:

  • 嗨@PranavHosangadi 我试过了,但它显示`AttributeError:'Bubbles'对象没有属性'timeit'
  • 那是因为您尝试了"bubble_small.timeit()(您的旧代码有错字)。像您解决问题一样解决问题
  • @PranavHosangadi 谢谢对不起我的坏...哈哈哈

标签: python-3.x python-module timeit


【解决方案1】:

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))

【讨论】:

  • 感谢@PranavHosangadi 的帮助!欣赏!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2013-12-20
相关资源
最近更新 更多