我想计时一些取决于某些设置的代码。设置代码看起来有点像这样:
>>> b = range(1, 1001)
我想要计时的代码看起来像这样:
>>> sorted(b)
除了我的代码使用与排序不同的功能。但现在这并不重要。
无论如何,只要我将字符串传递给timeit,我就知道如何为这段代码计时:
>>> import timeit
>>> t = timeit.Timer("sorted(b)", "b = range(1, 1001)")
>>> min(t.repeat(3, 100))
如何使用 setup callable 并将其放入 stmt callable 可以访问的命名空间中?
换句话说,我如何做与上面的代码相同的事情,但使用可调用对象,而不是包含可调用对象的字符串?
顺便说一句,这里更大的目标是重用我的单元测试中的代码来衡量性能:
import unittest
class TestSorting(unittest.TestCase):
def setUp(self):
self.b = range(1, 1001)
def test_sorted(self):
sorted(self.b)
我希望做一点工作。timeit 设置需要创建一个 TestSorting 实例,并且 stmt 代码必须以某种方式使用该特定实例。
一旦我了解了如何让 timeit 设置将内容放入与 timeit stmt 相同的命名空间中,我将研究如何将 unittest.TestCase 实例转换为可以直接输入 timeit.Timer 的内容。
马特