forked from ethanchewy/PythonBuddy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflattenrec.py
More file actions
31 lines (26 loc) · 811 Bytes
/
flattenrec.py
File metadata and controls
31 lines (26 loc) · 811 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""
A general way to flatten deeply recursive algorithms by delaying some
parts until later.
"""
try:
from thread import _local as TlsClass
except ImportError:
class TlsClass(object):
pass
class FlattenRecursion(TlsClass):
def __init__(self):
self.later = None
def __call__(self, func, *args, **kwds):
"""Call func(*args, **kwds), either now, or, if we're recursing,
then the call will be done later by the first level.
"""
if self.later is not None:
self.later.append((func, args, kwds))
else:
self.later = lst = []
try:
func(*args, **kwds)
for func, args, kwds in lst:
func(*args, **kwds)
finally:
self.later = None