Skip to content

Commit 3cd6e96

Browse files
author
lev epshtein
committed
decorator added
1 parent ff1e25b commit 3cd6e96

File tree

6 files changed

+99
-2
lines changed

6 files changed

+99
-2
lines changed

decorators/time.measure.deco2.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from time import sleep, time
2+
from functools import wraps
3+
4+
5+
def measure(func):
6+
@wraps(func)
7+
def wrapper(*args, **kwargs):
8+
t = time()
9+
func(*args, **kwargs)
10+
print(func.__name__, 'took:', time() - t)
11+
return wrapper
12+
13+
14+
@measure
15+
def f(sleep_time=0.1):
16+
"""I'm a cat. I love to sleep! """
17+
sleep(sleep_time)
18+
19+
20+
f(sleep_time=0.3) # f took: 0.3010902404785156
21+
print(f.__name__, ':', f.__doc__) # f : I'm a cat. I love to sleep!

decorators/time.measure.dry.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# whole timing mechanism has been encapsulated into
2+
# a function so we don't repeat code.
3+
4+
from time import sleep, time
5+
6+
def f():
7+
sleep(.3)
8+
9+
def g():
10+
sleep(.5)
11+
12+
def measure(func):
13+
t = time()
14+
func()
15+
16+
print(func.__name__, 'took:', time() - t)

decorators/time.measure.start.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from time import sleep, time
2+
3+
def f():
4+
sleep(.3)
5+
6+
def g():
7+
sleep(.5)
8+
9+
t = time()
10+
f()
11+
print('f took: ', time() - t) # f took: 0.3003859519958496
12+
t = time()
13+
g()
14+
print('g took:', time() - t) # g took: 0.5005719661712646

decorators/time.measute.deco1.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from time import sleep, time
2+
3+
def f(sleep_time=0.1):
4+
sleep(sleep_time)
5+
6+
def measure(func):
7+
def wrapper(*args, **kwargs):
8+
t = time()
9+
func(*args, **kwargs)
10+
print(func.__name__, 'took:', time() - t)
11+
return wrapper
12+
13+
f = measure(f) # decoration point
14+
15+
f(0.2) # f took: 0.2002875804901123
16+
f(sleep_time=0.3) # f took: 0.3003721237182617
17+
print(f.__name__) # wrapper <- ouch!

decorators/two.decorators.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from time import sleep, time
2+
from functools import wraps
3+
4+
def measure(func):
5+
@wraps(func)
6+
def wrapper(*args, **kwargs):
7+
t = time()
8+
result = func(*args, **kwargs)
9+
print(func.__name__, 'took:', time() - t)
10+
return result
11+
return wrapper
12+
13+
def max_result(func):
14+
@wraps(func)
15+
def wrapper(*args, **kwargs):
16+
result = func(*args, **kwargs)
17+
if result > 100:
18+
print('Result is too big ({0}). Max allowed is 100.'
19+
.format(result))
20+
return result
21+
return wrapper
22+
23+
@measure
24+
@max_result
25+
def cube(n):
26+
return n ** 3
27+
28+
print(cube(2))
29+
print(cube(5))

generators/generator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
## Generator expressions
2222

23-
# my_nums = list(x*x for x in [1,2,3,4,5])
24-
# my_sum = sum([x*x for x in range(1,10)])
23+
my_nums = list(x*x for x in [1,2,3,4,5])
24+
my_sum = sum([x*x for x in range(1,10)])
2525

2626
# print (my_nums)
2727
# print (my_sum)

0 commit comments

Comments
 (0)