Kristján Valur Jónsson <kristjan <at> ccpgames.com> writes: > > The problem with this is that once you have called > factorial() once, you end up with a recursive cycle.
You don't need a closure to exhibit a reference cycle. A global function is enough: >>> def helper(n): ... if n: ... return n*helper(n-1) ... else: ... return 1 ... >>> helper.func_globals['helper'] is helper True If you really want to avoid this you can prevent the function from depending on its outside environment: >>> from functools import partial >>> def helper2(rec, n): ... if n: ... return n*rec(rec, n-1) ... else: ... return 1 ... >>> factorial = partial(helper2, helper2) >>> "helper2" in factorial.func.func_globals True >>> del helper2 >>> "helper2" in factorial.func.func_globals False >>> factorial(3) 6 Regards Antoine. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com