Re: map vs. list-comprehension
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: map vs. list-comprehension

From: Tom Anderson <twic@urchin.earth.li>
Date: Thu Jun 30 2005 - 19:23:29 CEST

On Fri, 1 Jul 2005, Mike P. wrote:

> "Björn Lindström" <bkhl@stp.ling.uu.se> wrote in message
> news:87irzxtqsp.fsf@lucien.dreaming...
>> "F. Petitjean" <littlejohn.75@news.free.fr> writes:
>>
>>> res = [ bb+ii*dd for bb,ii,dd in zip(b,i,d) ]
>>>
>>> Hoping that zip will not be deprecated.
>>
>> Nobody has suggested that. The ones that are planned to be removed are
>> lambda, reduce, filter and map. Here's GvR's blog posting that explains
>> the reasons:
>>
>> http://www.artima.com/weblogs/viewpost.jsp?thread=98196
>
> That really sucks, I wasn't aware of these plans. Ok, I don't use reduce
> much, but I use lambda, map and filter all the time. These are some of
> the features of Python that I love the best. I can get some pretty
> compact and easy to read code with them.

Same here.

> And no, I'm not a Lisp programmer (never programmed in Lisp). My
> background being largely C++, I discovered lambda, apply, map and filter
> in Python, although I had seen similar stuff in other functional
> languages like Miranda and Haskell.

Same here too!

> Also, I don't necessarily think list comprehensions are necessarily
> easier to read. I don't use them all that much to be honest.

And here!

However, i also felt that way about generator functions - until the other
day, when i realised one was the best solution to a problem i had. That
made me realise that the same was probably true of list comprehensions.

That said, i do still think that map etc are better than list comps,
because they involve less language. Once you have the idea of a function
and a list, you can understand map as a function that operates on lists;
list comprehensions provide a whole new splodge of arbitrary syntax to
learn. I guess you could say the same about lambda, which is really an
essential part of the whole map way of life, but i don't think that's fair
- list comprehensions are a structure for doing just one thing, whereas
lambda is a construct of enormous general power.

I'd be happy for the lambda syntax to be tidied up, though - perhaps it
could be merged with def? Like:

def name(args): # traditional form
         some_statements
         return some_expression

def name(args): return some_expression # one-line form

def name(args): some_statements; return some_expression

def name(args) = some_expression # shorthand one-line form

Then an anonymous form, which is an expression rather than a statement:

def (args):
         some_statements
         return some_expression

def (args): return some_expression

def (args) = some_expression

The latter form is like a lambda; i'm not sure how the former forms would
work inside enclosing expressions; i think it would look pretty sick:

surfaceAreaToVolumeRatios = map(def (radius):
         area = 4.0 * math.pi * (radius ** 2)
         volume = 4.0 / 3.0 * math.pi * (radius ** 2)
         return area / volume
, radii)

It works, but i admit it's not hugely pretty. But then, i would't advise
anyone to actually do this; it's just there for completeness.

You might also want to allow:

def name(args) = some_statements; some_expression

And the anonymous counterpart. But i'm not sure about that one. Multiple
expressions inside lambdas would sometimes be useful, but you can get
those with the shorthand form.

> I think at this stage the Python community and Python programmers would
> be better served by building a better, more standardised, cross
> platform, more robust, better documented, and more extensive standard
> library. I would be happy to contribute in this regard, rather than
> having debates about the addition and removal of language features which
> don't improve my productivity.

Same here.

> Sorry, I've probably gone way off topic, and probably stirred up
> political issues which I'm not aware of, but, man when I hear stuff like
> the proposed removal of reduce, lambda, filter and map, all I see ahead
> of me is a waste of time as a programmer.

Same here.

> Sorry for the OT long rant.

Yeah, that was really off-topic for a python newsgroup. You didn't even
mention regional accents once!

tom

-- 
How did i get here?
Received on Thu Sep 29 16:40:19 2005