Skip to content

Instantly share code, notes, and snippets.

@ydm
Last active March 14, 2016 07:41
Show Gist options
  • Save ydm/dcdfa19e77eddd87e8ae to your computer and use it in GitHub Desktop.
Save ydm/dcdfa19e77eddd87e8ae to your computer and use it in GitHub Desktop.
Chain functions in Python. It's like Haskell's dot operator, but better. ^_^
import functools
def chain(*fs, reverse=True):
def dec(g):
@functools.wraps(g)
def wrapper(*args, **kwargs):
functions = reversed(fs) if reverse else fs
a = lambda m, f: f(m)
return functools.reduce(a, functions, g(*args, **kwargs))
return wrapper
return dec
# Exmaple
#
# def ts(t):
# t2 = t * t
# t3 = t2 * t
# return [t3, t2, t, 1]
#
# tsrev = chain(list, reversed)(ts)
# OR
# @chain(list, reversed)
# def tsrev(t):
# return ts(t)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment