Shane Hathaway wrote:
Brian's suggestion makes the code read more like an outline. In Brian's example, the high-level intent stands out from the details
that assumes that when you call a library function, the high-level intent of *your* code is obvious from the function name in the library, and to some extent, by the argument names chosen by the library implementor.
I'm not so sure that's always a valid assumption.
while in your example, there is no visual cue that distinguishes the details from the intent.
carefully chosen function names (that you chose yourself) plus blank lines can help with that.
Of course, lambdas are even better, when it's possible to use them:
doFoo((lambda a, b: a + b), (lambda c, d: c + d))
that only tells you that you're calling "doFoo", with no clues whatsoever to what the code in the lambdas are doing. keyword arguments are a step up from that, as long as your intent matches the library writers intent.