on a very slow function

Daniel Bastos dbastos at toledo.com
Sun Oct 1 17:27:58 EDT 2017


def make_sequence_non_recursive(N, x0 = 2, c = -1):
  "What's wrong with this function?  It's very slow."
  last = x0
  def sequence():
    nonlocal last
    next = last
    last = last**2 + c
    return next % N
  return sequence

It crawls pretty soon.  Please advise?  Thank you.

>>> f = make_sequence_non_recursive(1032)
>>> timeit("f()", setup="from __main__ import f", number=1)
2.851021349670191e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
2.851021349670191e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
2.851021349670191e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
3.1361234960058937e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
3.1361234960058937e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
3.9914298213261645e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
4.276531967661867e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
4.276531967661867e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
4.846736260333273e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
5.131838292982138e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
7.412655463667761e-06
>>> timeit("f()", setup="from __main__ import f", number=1)
1.3684902228305873e-05
>>> timeit("f()", setup="from __main__ import f", number=1)
3.250164286328072e-05
>>> timeit("f()", setup="from __main__ import f", number=1)
9.009227323986124e-05
>>> timeit("f()", setup="from __main__ import f", number=1)
0.0002594429389546349
>>> timeit("f()", setup="from __main__ import f", number=1)
0.0007706310592539012
>>> timeit("f()", setup="from __main__ import f", number=1)
0.002319305833339058
>>> timeit("f()", setup="from __main__ import f", number=1)
0.007012372007011436
>>> timeit("f()", setup="from __main__ import f", number=1)
0.021163131162552418
>>> timeit("f()", setup="from __main__ import f", number=1)
0.06563849334929728
>>> timeit("f()", setup="from __main__ import f", number=1)
0.1944633166216363
>>> timeit("f()", setup="from __main__ import f", number=1)
0.5879943492758457
>>> timeit("f()", setup="from __main__ import f", number=1)
1.7068785165565714
>>> timeit("f()", setup="from __main__ import f", number=1)
5.1329479702866365
>>> timeit("f()", setup="from __main__ import f", number=1)
15.436177179570109
>>> 



More information about the Python-list mailing list