Python: calling method in the map function
Question: `map()` and list comprehension are roughly equivalent:

    
    
    map(function, list1)
    [function(i) for i in list1]
    

What if the function we want to use is a method?

    
    
    [i.function() for i in list1]
    map(.function, list1) # error!
    map(run_method(function), list1) # error!
    

How could I perform this kind of manipulation with `map`?


Answer: You'd use
[`operator.methodcaller()`](http://docs.python.org/2/library/operator.html#operator.methodcaller):

    
    
    from operator import methodcaller
    
    map(methodcaller('function'), list1)
    

`methodcaller()` accepts additional arguments that are then passed into the
called method; `methodcaller('foo', 'bar', spam='eggs')(object)` is the
equivalent of `object.foo('bar', spam='eggs')`.

If all objects in `list1` are the same type or subclasses of that type, _and_
the method you want to call doesn't take any arguments, you can pass in the
unbound method to `map` as the function to call. For example, to lowercase all
strings in a list, you can use:

    
    
    map(str.lower, list_of_strings)
    

where `str.lower` is the unbound method on the `str` type.

Note that a list comprehension is not really the equivalent of a `map()` here.
`map()` can only do _one_ loop, entirely in C. `map()` will `zip()` multiple
iterable arguments, and `map()` in Python 3 is itself an iterator.

A list comprehension on the other hand can do multiple (nested) loops and add
in filtering, and the left-hand expression can be any valid Python expression
including nested list comprehensions.

