[Python-Dev] recursive closures - reference cycle (original) (raw)
Antoine Pitrou solipsis at pitrou.net
Tue Dec 8 15:55:06 CET 2009
- Previous message: [Python-Dev] recursive closures - reference leak
- Next message: [Python-Dev] recursive closures - reference cycle
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Kristján Valur Jónsson <kristjan 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.funcglobals['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.funcglobals True del helper2 "helper2" in factorial.func.funcglobals False factorial(3) 6
Regards
Antoine.
- Previous message: [Python-Dev] recursive closures - reference leak
- Next message: [Python-Dev] recursive closures - reference cycle
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]