Functional Python Programming

(Wang) #1
Chapter 5

Lambdas and the lambda calculus


In a book on a purely functional programming language, it would be necessary to
explain lambda calculus, and the technique invented by Haskell Curry that we call
currying. Python, however, doesn't stick closely to this kind of lambda calculus.
Functions are not curried to reduce them to single-argument lambda forms.


We can, using the functools.partial function, implement currying. We'll save this
for Chapter 10, The Functools Module.


Using the map() function to apply a function to a collection


A scalar function maps values from a domain to a range. When we look at the math.
sqrt() function, as an example, we're looking at a mapping from the float value, x,
to another float value, y = sqrt(x) such that yx^2 =. The domain is limited to positive
values. The mapping can be done via a calculation or table interpolation.


The map() function expresses a similar concept; it maps one collection to another
collection. It assures that a given function is used to map each individual item from
the domain collection to the range collection—the ideal way to apply a built-in
function to a collection of data.


Our first example involves parsing a block of text to get the sequence of numbers.
Let's say we have the following chunk of text:





text= """\





... 2 3 5 7 11 13 17 19 23
29


... 31 37 41 43 47 53 59 61 67
71


... 73 79 83 89 97 101 103 107 109
113


... 127 131 137 139 149 151 157 163 167
173


... 179 181 191 193 197 199 211 223 227
229


... """


We can restructure this text using the following generator function:





data= list(v for line in text.splitlines() for v in line.split())




Free download pdf