[sf-lug] [PyClass] code for a timeit decorator
jim
jim at well.com
Wed Mar 11 07:48:57 PDT 2009
taken from
http://www.biais.org/blog/index.php/Python/2007/01
which has some other interesting decorators as well.
A very simple decorator to notify users (no profiling) about the
execution time of some parts of your code.
# comments below are mine (js) ; the idea of a decorator is that you
# make a function and then use it in tandem with other functions
# (or classes) in your code. note it makes little sense to make
# a decorator if you don't use it with more than one function.
# the point is that using a function as a decorator lets you
# distribute some kind of behavior into multiple other functions
# without duplicating the code within each of the other functions.
--------------THE CODE--------------
import time
def timemeth(func): # define a function, nothing special
"Internal class method timing decorator"
def _inner(self, *args, **kw):
start = time.time()
res = func(self, *args, **kw)
self.timed = time.time() - start
return res
return _inner
class TimedClass:
def __init__(self):
self.timed = 0
class Sample(TimedClass):
@timemeth # use the @ symbol with the function name...
def learn(self): # ...immediately above whatever you want...
for i in range(1000000): # ...to decorate...
i * i
if __name__ == "__main__":
s = Sample()
print "Learning sample..."
s.learn()
print "Learning done ! (%.2f secs)" % s.timed
--------------THE CODE--------------
outputs:
$ python timedclass.py
Learning sample...
Learning done ! (2.01 secs)
More information about the sf-lug
mailing list