Skip to content

Instantly share code, notes, and snippets.

@maxcountryman
Last active August 29, 2015 13:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxcountryman/9102852 to your computer and use it in GitHub Desktop.
Save maxcountryman/9102852 to your computer and use it in GitHub Desktop.
A Clojure-inspired generator trampoline decorator.
import functools
import types
def gentramp(gen):
def unroll(g):
while isinstance(g, types.GeneratorType):
g = g.next()
return g
@functools.wraps(gen)
def decorated(*args, **kwargs):
decorated.recur = gen
return unroll(gen(*args, **kwargs))
return decorated
@gentramp
def fact(n, acc=1):
if n == 1:
yield acc
yield fact.recur(n - 1, n * acc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment