http://getpython3.com/diveintopython3/
From Chapter 6. Closures and Generators.
Guess what? Functions are just other kind of objects in Python!
The technique of using the values of outside parameters within a dynamic function is called closures
import re
def build_match_and_apply_functions(pattern,search,replace):
'''
builds dynamically a tuple containing two functions (matches_rule,apply_rule) for each tuple (pattern,search,replace) received
the constants patter,search and replaced get substituted by the actual parameters passed to the function accordingly
'''
def matches_rule(word):
return re.search(pattern,word)
def apply_rule(word):
return re.sub(search,replace,word)
return (matches_rule,apply_rule)
patterns = \
'''
for each of these patterns two functions will be built a match_rule and an apply_rule functions
'''
(
('[sxz]$','$','es'),
('[^aeioudgkprt]h$','$','es'),
('(qu|[^aeiou])y$','y$','ies'),
('$','$','s')
)
'''
this is called a list comprehension in Python terms
in this case we have as a result, a list containing tuples of match_rule and apply_rule functions
'''
rules = [build_match_and_apply_functions(pattern,search,replace)
for (pattern, search,replace) in patterns]
print(rules)
def plural(noun):
for matches_rule, apply_rule in rules:
if matches_rule(noun):
return apply_rule(noun)
nouns = ["sufix","trash","lady","cat","math","boy","day",'pita','vacancy']
for noun in nouns:
print(plural(noun))
I'm still in the process of assimilation, and this is pretty cool stuff.



