Functional Python Programming

(Wang) #1

Higher-order Functions


This will split the text into lines. For each line, it will split the line into space-delimited
words and iterate through each of the resulting strings. The results look as follows:


['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 still need to apply the int() function to each of the string values. This is where
the map() function excels. Take a look at the following code snippet:





list(map(int,data))





[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]


The map() function applied the int() function to each value in the collection.
The result is a sequence of numbers instead of a sequence of strings.


The map() function's results are iterable. The map() function can process any type
of iterable.


The idea here is that any Python function can be applied to the items of a collection
using the map() function. There are a lot of built-in functions that can be used in this
map-processing context.


Working with lambda forms and map()


Let's say we want to convert our trip distances from nautical miles to statute miles.
We want to multiply each leg's distance by 6076.12/5280, which is 1.150780.


We can do this calculation with the map() function as follows:


map(lambda x: (start(x),end(x),dist(x)*6076.12/5280), trip)


We've defined a lambda that will be applied to each leg in the trip by the map()
function. The lambda will use other lambdas to separate the start, end, and distance
values from each leg. It will compute a revised distance and assemble a new leg
tuple from the start, end, and statute mile distance.


This is precisely like the following generator expression:


((start(x),end(x),dist(x)*6076.12/5280) for x in trip)

Free download pdf