[Tutor] map() and lambda to change class instance attribute

Danny Yoo dyoo at hkn.eecs.berkeley.edu
Wed May 11 20:49:47 CEST 2005


> I have to confess that I already use map(), or should I say abuse, for
> this, although it is the first time I consider using lambdas. Up until
> now I always used map() to perform a looped call on a function that
> would change the attribute value, as shown in Mark Lutz & David Ascher's
> Learning Python:
>
> # Perform attribute value change on a single instance
> def iterateInstances( oInstance ):
>       oInstance.value = myValue
>
> # Loop over list of instances
> map( iterateInstances, aListOfInstances )


What!!!  Seriously?  I'm making a style judgement here, so perhaps I could
be wrong, but I think that's terrible that Learning Python has such an
example.  If you have a page number, I'll look it up and then write a
complaint.  *grin*


The major problem here is that both map() and list comprehensions are
really meant to be used because they generate a list of return values.

If we use a map() or list comprehensions, such as:

     map(lambda x: x^2, [1, 2, 3])

     [x^2 for x in [1, 2, 3]]


then we're really saying something like this:

     [1,     2,     3]
      |      |      |
      |      |      |  map()
      |      |      |
      V      V      V
     [1,     4,     9]


where map() produces a list of values.


If we're using map() just because it evaluates something on every element
on a list, then, to make the intent more clear, we really should either
use something like a foreach() function instead of map():

######
def foreach(function, l):
    """Apply some function on every element in l.  Does not accumulate
    return values."""
    for x in l:
        function(l)
######

If we use something like foreach(0, then this makes it clear that we
really don't care about return values at all.


I should add that I'm arguing for style here.  Things do work pefectly
well with map() too --- the computer doesn't care that it's throwing
return values away --- but we should do our best to document intent in our
programs.

Best of wishes!



More information about the Tutor mailing list