Skip to content

Instantly share code, notes, and snippets.

@benzap
Created January 6, 2016 21:01
Show Gist options
  • Save benzap/b8549babce25f16403e5 to your computer and use it in GitHub Desktop.
Save benzap/b8549babce25f16403e5 to your computer and use it in GitHub Desktop.
Clojure Threading in Python
from types import (
ListType,
TupleType,
FunctionType,
LambdaType
)
def thread_first(expr, *exprs):
for expression in exprs:
if type(expression) in [ListType, TupleType]:
expr = expression[0](expr, *expression[1:])
elif type(expression) in [FunctionType, LambdaType]:
expr = expression(expr)
return expr
def thread_second(expr, *exprs):
expr = expr
for expression in exprs:
if type(expression) in [ListType, TupleType]:
argument_list = []
if len(expression) >= 2:
argument_list.append(expression[1])
argument_list.append(expr)
if len(expression) >= 3:
argument_list += expression[2:]
expr = expression[0](*argument_list)
elif type(expression) in [FunctionType, LambdaType]:
expr = expression(expr)
return expr
print thread_second(
range(11),
(filter, lambda x: x % 2 == 0),
(map, lambda x: x * 2),
lambda xs: xs[-1])
# Output: 20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment