Writing higher-order mappings and filters
Python's two built-in higher-order functions, map()
and filter(),
generally handle almost everything we might want to throw at them. It's difficult to optimize them in a general way to achieve higher performance. We'll look at functions of Python 3.4, such as imap()
, ifilter()
, and ifilterfalse()
, in Chapter 8, The Itertools Module.
We have three largely equivalent ways to express a mapping. Assume that we have some function, f(x)
, and some collection of objects, C
. We have three entirely equivalent ways to express a mapping; they are as follows:
The
map()
function:map(f, C)
The generator expression:
(f(x) for x in C)
The generator function:
def mymap(f, C): for x in C: yield f(x) mymap(f, C)
Similarly, we have three ways to apply a filter
function to a collection
, all of which are equivalent:
The
filter()
function:filter(f, C)
The generator expression:
(x for x in C if f(x))
The generator function:
def myfilter(f, C): for x in C: if...