-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathtest.py
More file actions
51 lines (39 loc) · 1.06 KB
/
test.py
File metadata and controls
51 lines (39 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#coding: utf-8
'''An example of the Template pattern in Python
http://ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/
'''
# Skeletons
def iter_elements(getter, action):
'''Template skeleton that iterates items'''
for element in getter():
action(element)
print '-' * 10
def rev_elements(getter, action):
'''Template skeleton that iterates items in reverse order'''
for element in getter()[::-1]:
action(element)
print '-' * 10
# Getters
def get_list():
return "spam eggs".split()
def get_lists():
return [list(x) for x in "spam eggs".split()]
# Actions
def print_item(item):
print item
def reverse_item(item):
print item[::-1]
# Makes templates
def make_template(skeleton, getter, action):
'''Instance a template method with a getter and an action'''
def template():
skeleton(getter, action)
return template
# Create our template functions
templates = [make_template(s, g, a)
for g in (get_list, get_lists)
for a in (print_item, reverse_item)
for s in (iter_elements, rev_elements)]
# Execute them
for template in templates:
template()