Notes for Quarter 2, class 4¶
Questions that came up¶
More on Decorators¶
Eric found this decorator in Core Python Programming by Wesley Chun.
#! /usr/bin/env python
from time import time
def logged(when):
def log(f, *args, **kargs):
print('''Called
function: %s
args: %r
kargs: %r''' % (f, args, kargs))
def pre_logged(f):
def wrapper(*args, **kargs):
log(f, *args, **kargs)
return f(*args, **kargs)
return wrapper
def post_logged(f):
def wrapper(*args, **kargs):
now = time()
try:
return f(*args, **kargs)
finally:
log(f, *args, **kargs)
print("time delta: %s" % (time() - now))
return wrapper
try:
return {"pre": pre_logged,
"post": post_logged}[when]
except KeyError as e:
raise (ValueError(e), 'must be "pre" or "post" ')
@logged("post")
def hello(name):
print("Hello, ", name)
hello("World")
There’s a lot of layers of nesting in there – let’s figure it out!