3 ms·
I don't enjoy balancing parentheses in Python so I tried to bring Clojure's threading macro into the language... def do(x, fs): for f in fs:
by Garph 7y ago
I don't enjoy balancing parentheses in Python so I tried to bring Clojure's threading macro into the language...
def do(x, fs):
for f in fs:
x = f(x)
return x
Which allows left-to-right style programming
do(list, filter, partial(map, int), sum)
I haven't put this into production code yet, but love pipelining scripts with do
- karmakaze 7y agoI made a thing[0] just like that to do pipelined async db queries: CompletableFuture<Member> asyncProjectMembers = Async.pipeline(Accounts.where("id >= ?", 1000);, (accounts) -> accounts.loadProjects("updated_at >= ?", Instant.now().minusDays(30)), (projects) -> projects.loadMembers()); If you assign the intermediates to variables, each instance will have associated with it the related collection that's queried while avoiding N+1's. [0] https://github.com/karmakaze/safeql https://github.com/karmakaze/safeql
- sooheon 7y agoAlso see PyToolz's implementation: https://toolz.readthedocs.io/en/latest/api.html#toolz.functoolz.thread_first https://toolz.readthedocs.io/en/latest/api.html#toolz.functo... They differentiate thread first/last for Fns with arity > 1, just like Clojure.