Skip to content
This repository was archived by the owner on Dec 2, 2021. It is now read-only.

Commit 9b50dfb

Browse files
committed
Closure and other staff
1 parent 55b1ee0 commit 9b50dfb

File tree

8 files changed

+123
-6
lines changed

8 files changed

+123
-6
lines changed

06-dp-1class-func/dp_func_4.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,10 @@
55
cart = [LineItem('banana', 4, .5), # <2>
66
LineItem('apple', 10, 1.5),
77
LineItem('watermellon', 5, 5.0)]
8-
print(Order(joe, cart, fidelity_promo))
9-
print(Order(ann, cart, fidelity_promo))
8+
109
banana_cart = [LineItem('banana', 30, .5), LineItem('apple', 10, 1.5)]
11-
print(Order(joe, banana_cart, bulk_item_promo)) # <6>
1210

1311
long_order = [LineItem(str(item_code), 1, 1.0) for item_code in range(10)]
14-
print(Order(joe, long_order, large_order_promo))
15-
print(Order(joe, cart, large_order_promo))
1612

1713
print(Order(joe, long_order, best_promo))
1814
print(Order(joe, banana_cart, best_promo))

07-closure-deco/average_2.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
3+
def make_averager():
4+
count = 0
5+
sum = 0
6+
7+
def averager(new_value):
8+
nonlocal count, sum
9+
count += 1
10+
sum += new_value
11+
return sum/count
12+
13+
return averager
14+
15+
avg = make_averager()
16+
print(avg(10))
17+
print(avg(11))
18+
print(avg(12))

07-closure-deco/average_driver.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from average import make_averager
2+
3+
avg = make_averager()
4+
print(avg(10))
5+
print(avg(11))
6+
print(avg(12))
7+
print(avg.__code__.co_varnames)
8+
print(avg.__code__.co_freevars)
9+
print(avg.__closure__) # doctest: +ELLIPSIS
10+
print(avg.__closure__[0].cell_contents)

07-closure-deco/clockdeco_2.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# clockdeco.py
2+
3+
import time
4+
import functools
5+
6+
def clock(func):
7+
@functools.wraps(func)
8+
def clocked(*args, **kwargs):
9+
t0 = time.time()
10+
result = func(*args, **kwargs)
11+
elapsed = time.time() - t0
12+
name = func.__name__
13+
arg_lst = []
14+
if args:
15+
arg_lst.append(', '.join(repr(arg) for arg in args))
16+
if kwargs:
17+
pairs = ['%s=%r' % (k,w) for k, w in sorted(kwargs.items())]
18+
arg_lst.append(', '.join(pairs))
19+
arg_str = ', '.join(arg_lst)
20+
print('[%0.8fs] %s(%s) -> %r ' % (elapsed, name, arg_str, result))
21+
return result
22+
return clocked
23+
24+
@clock
25+
def snooze(seconds):
26+
time.sleep(seconds)
27+
28+
@clock
29+
def factorial(n):
30+
return 1 if n < 2 else n*factorial(n-1)
31+
32+
if __name__=='__main__':
33+
print('*' * 40, 'Calling snooze(.123)')
34+
snooze(.123)
35+
print('*' * 40, 'Calling factorial(6)')
36+
print('6! =', factorial(6))

07-closure-deco/clockdeco_cls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,10 @@ def snooze(seconds):
3939

4040
for i in range(3):
4141
snooze(.123)
42+
print(snooze(.1)) # doctest: +ELLIPSIS
43+
print(clock('{name}: {elapsed}')(time.sleep)(.2) ) # doctest: +ELLIPSIS
44+
print(clock('{name}({args}) dt={elapsed:0.3f}s')(time.sleep)(.2))
4245

4346
# END CLOCKDECO_CLS
47+
##"""
48+

07-closure-deco/fb_d1.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from strategy_best4 import Customer, LineItem, Order, best_promo
2+
3+
joe = Customer('John Doe', 0) # <1>
4+
ann = Customer('Ann Smith', 1100)
5+
cart = [LineItem('banana', 4, .5), # <2>
6+
LineItem('apple', 10, 1.5),
7+
LineItem('watermellon', 5, 5.0)]
8+
9+
banana_cart = [LineItem('banana', 30, .5), LineItem('apple', 10, 1.5)]
10+
11+
long_order = [LineItem(str(item_code), 1, 1.0) for item_code in range(10)]
12+
13+
print(Order(joe, long_order, best_promo))
14+
print(Order(joe, banana_cart, best_promo))
15+
print(Order(ann, cart, best_promo))

07-closure-deco/generic.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,8 @@ def _(seq):
4949
return '<ul>\n<li>' + inner + '</li>\n</ul>'
5050

5151
# END HTMLIZE
52-
52+
print(htmlize({1, 2, 3}))
53+
print(htmlize(abs))
54+
print(htmlize('Heimlich & Co.\n- a game'))
55+
print(htmlize(42)) # <3>
56+
print(htmlize(['alpha', 66, {3, 2, 1}])) # <4>

07-closure-deco/global_x_local.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
def f1(a):
2+
print(a)
3+
print(b)
4+
# f1(3)
5+
b = 6
6+
f1(3)
7+
8+
9+
def f2(a):
10+
print(a)
11+
print(b)
12+
b = 9
13+
14+
15+
def f3(a):
16+
global b
17+
print(a)
18+
print(b)
19+
b = 9
20+
21+
f3(6)
22+
23+
def f4(b):
24+
def f5(a):
25+
nonlocal b
26+
print(a)
27+
print(b)
28+
b = 7
29+
return f5
30+
31+
...
32+
f5b = f4(8)
33+
f5b(2)

0 commit comments

Comments
 (0)