from functools import reduce, partial
def identity(x):
return x
def add3(a, b, c):
print("adding {}, {}, and {}".format(a, b, c))
return a + b + c
def compose2(f, g):
# print("composing {} and {}".format(f, g))
return lambda x: f(g(x))
def compose_list(fs):
return reduce(compose2, fs, identity)
def partial_list(fs):
return partial(*fs)
pipeline = [
[ add3, 1, 2 ],
[ add3, 3, 4 ],
[ add3, 5, 6 ],
]
def main():
pipe_partials = map(partial_list, reversed(pipeline))
pipe_partials = list(pipe_partials)
pipe_composed = compose_list(pipe_partials)
v = pipe_composed(0)
print(v)
if __name__ == "__main__":
main()
# $ python3 evil_partials.py
# adding 1, 2, and 0
# adding 3, 4, and 3
# adding 5, 6, and 10
# 21
Comments