Chris said :

"I think map is fine if you can use a named function, but if you can't
come up with a descriptive name for what you're doing, a comprehension
is probably better (as it'll have the code right there). Mapping _
across everything tells you nothing about what it's actually doing"

OK, this makes a lot of sense. (Any my apologies to Peter Otten if my previous 
post was overly snarky).

How about this? I put the following in my catchall_utility.py module

  # the oneArg combinator takes a multi-argument calleable
  # and returns the equivalent single argument calleable
  oneArg = lambda c: lambda x : c(*x)


With example code

  map(oneArg(P), zip([1,2,3], [6, 5, 4]))

To my mind the idea that oneArg(P) is a calleble that behaves exactly like P, 
with the only difference being oneArg(P) accepts P's arguments packed into a 
single iterable, is very intuitive.

I actually find the oneArg version more readable than the comprehension that 
unpacks explicitly using *. At this point I probably have equal experience 
coding Lisp and Py, with the latter more recent, so I don't think this bias can 
be chalked up to "experienced functional programmer, beginner py programmer".

To be clear, I was never really intending to keep the

  _ = lambda c : lambda x : c(*x)
  map(oneArg(P), zip([1,2,3], [6, 5, 4]))

code snippets in my final work product. The purpose of this thread was too fish 
around for ideas on what to replace it with when I execute the "use the unit 
tests to facilitate refactoring for better names and more professional idioms" 
step.

(We never, ever, skip that step, right?)

Although it is unlikely you will convince me to use the comprehension in this 
sort of situation, it's possible someone could convince me to use starmap with 
P instead of map with oneArg(P). Those two techniques are fully equivalent. 
But, to my mind, the latter just feels right, and I find that I write fewer 
bugs when I use idioms that resonate.

Thanks again, good thread for me
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to