14.4 Functional Programming Tools
The map function is the
simplest
representative of a class of Python built-ins used for
functional programming—which mostly just
means tools that apply functions to sequences. Its relatives filter
out items based on a test function (filter), and
apply functions to pairs of items and running results
(reduce). For example, the following
filter call picks out items in a sequence greater
than zero:
>>> range(-5, 5)
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> filter((lambda x: x > 0), range(-5, 5))
[1, 2, 3, 4]
Items in the sequence for which the function returns true are added
to the result list. Like map,
it's roughly equivalent to a for
loop, but is built-in and fast:
>>> res = [ ]
>>> for x in range(-5, 5):
... if x > 0:
... res.append(x)
...
>>> res
[1, 2, 3, 4]
Here are two reduce calls computing the sum and
product of items in a list:
>>> reduce((lambda x, y: x + y), [1, 2, 3, 4])
10
>>> reduce((lambda x, y: x * y), [1, 2, 3, 4])
24
At each step, reduce passes the current sum or product, along with
the next item from the list, to the passsed in
lambda function. By default, the first item in the
sequence initializes the starting value. Here's the
for loop equivalent to the first of these, with
the addition hardcoded inside the loop:
>>> L = [1,2,3,4]
>>> res = L[0]
>>> for x in L[1:]:
... res = res + x
...
>>> res
10
If this has sparked your interest, also see the built-in
operator module, which provides functions that
correspond to built-in expressions, and so comes in handy for some
uses of functional tools:
>>> import operator
>>> reduce(operator.add, [2, 4, 6]) # function-based +
12
>>> reduce((lambda x, y: x + y), [2, 4, 6])
12
Some observers might also extend the functional programming toolset
in Python to include lambda and
apply, and list comprehensions (discussed in the
next section).
|