Shashank Singh, 26.05.2010 21:48:
What is the most efficient way of applying a function to all the elements of
an iterable while discarding the
result (i.e. operations are done only for side-effects).

For example if I want to save all elements in a list of items (and am not
interested in what save() returns), the
simplest way is:

itemlist = [i1, i2, i3....]
for item in itemlist: item.save()

It might be squeezing too much but is it possible to do it more efficiently
by pushing the looping inside the C code
and achieve some gains as is done by using map in place of a for loop when
the return values need to be saved?

If all items have the exact same type, you can get away with an unbound method:

    class MyType(object):
        ...
        def safe(self):
            ...

    itemlist = [ MyType() for i in range(20) ]

    # this is what you want:

    from itertools import imap
    for _ in imap(MyType.save, itemlist): pass


But some people may consider this too ugly to actually use in real code.

Stefan

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to