diff -r 4b5461dcd190 Lib/test/test_timeit.py --- a/Lib/test/test_timeit.py Wed May 13 15:02:12 2015 +0300 +++ b/Lib/test/test_timeit.py Wed May 13 16:36:59 2015 +0300 @@ -124,6 +124,9 @@ class TestTimeit(unittest.TestCase): def test_timeit_callable_stmt(self): self.timeit(self.fake_callable_stmt, self.fake_setup, number=3) + def test_timeit_callable_setup(self): + self.timeit(self.fake_stmt, self.fake_callable_setup, number=3) + def test_timeit_callable_stmt_and_setup(self): self.timeit(self.fake_callable_stmt, self.fake_callable_setup, number=3) @@ -184,6 +187,10 @@ class TestTimeit(unittest.TestCase): self.repeat(self.fake_callable_stmt, self.fake_setup, repeat=3, number=5) + def test_repeat_callable_setup(self): + self.repeat(self.fake_stmt, self.fake_callable_setup, + repeat=3, number=5) + def test_repeat_callable_stmt_and_setup(self): self.repeat(self.fake_callable_stmt, self.fake_callable_setup, repeat=3, number=5) diff -r 4b5461dcd190 Lib/timeit.py --- a/Lib/timeit.py Wed May 13 15:02:12 2015 +0300 +++ b/Lib/timeit.py Wed May 13 16:36:59 2015 +0300 @@ -68,7 +68,7 @@ default_timer = time.perf_counter # in Timer.__init__() depend on setup being indented 4 spaces and stmt # being indented 8 spaces. template = """ -def inner(_it, _timer): +def inner(_it, _timer{init}): {setup} _t0 = _timer() for _i in _it: @@ -126,9 +126,10 @@ class Timer: stmt = reindent(stmt, 8) if isinstance(setup, str): setup = reindent(setup, 4) - src = template.format(stmt=stmt, setup=setup) + src = template.format(stmt=stmt, setup=setup, init='') elif callable(setup): - src = template.format(stmt=stmt, setup='_setup()') + src = template.format(stmt=stmt, setup='_setup()', + init=', _setup=_setup') local_ns['_setup'] = setup else: raise ValueError("setup is neither a string nor callable")