Functional Python Programming

(Wang) #1
Chapter 3

We can create instances of our Mersenne1 class with an embedded strategy
algorithm, as follows:


m1s= Mersenne1(shifty)
m1m= Mersenne1(multy)
m1f= Mersenne1(faster)


This shows how we can define alternative functions that produce the same result but
use different algorithms.


Python allows us to compute M 89 =−2 1^89 , since this
doesn't even come close to the recursion limits in Python.
This is quite a large prime number, with 27 digits.

Using strings


Since Python strings are immutable, they're an excellent example of functional
programming objects. A Python string module has a number of methods, all of
which produce a new string as the result. These methods are pure functions with
no side effects.


The syntax for string method functions is postfix, where most functions are
prefix. This means that complex string operations can be hard to read when
they're commingled with conventional functions.


When scraping data from a web page, we might have a cleaner function that applies
a number of transformations to a string to clean up the punctuation and return a
Decimal object for use by the rest of the application. This will involve a mixture of
prefix and postfix syntax.


It might look like the following command snippet:


from decimal import *
def clean_decimal(text):
if text is None: return text
try:
return Decimal(text.replace("$", "").replace(",", ""))
except InvalidOperation:
return text


This function does two replacements on the string to remove $ and , string values.
The resulting string is used as an argument to the Decimal class constructor, which
returns the desired object.

Free download pdf