decorator question
Schüle Daniel
uval at rz.uni-karlsruhe.de
Sun Jan 8 17:26:28 EST 2006
hello NG,
consider this code
>>> def timelogger(f):
... def wrapper(*a,**kw):
... print "started at %s" % time.ctime()
... t0 = time.time()
... f(*a, **kw)
... t1 = time.time()
... print "ended at %s" % time.ctime()
... print "diff = ", t1-t0, "sec"
... return wrapper
...
>>> import time
>>> @timelogger
... def loops(a,b,c):
... sum = 0
... for i in range(a):
... for j in range(b):
... for k in range(c):
... sum += 1
...
>>> loops
<function wrapper at 0x402eec34>
>>> loops(10,10,10)
started at Sun Jan 8 23:19:19 2006
ended at Sun Jan 8 23:19:19 2006
diff = 0.000367164611816 sec
the code above works fine
but I am wondering wheather it's possible to
write something like this
>>> def timelogger(f, logfile=sys.stdout):
... def wrapper(*a,**kw):
... logfile.write("started at %s" % time.ctime())
... t0 = time.time()
... f(*a, **kw)
... t1 = time.time()
... logfile.write("ended at %s" % time.ctime())
... logfile.write("diff = %f %s" % (t1-t0, "sec"))
... return wrapper
>>> import time
>>> @timelogger(file("hierher", "a")) ### <<<<<< (1)
... def loops(a,b,c):
... sum = 0
... for i in range(a):
... for j in range(b):
... for k in range(c):
... sum += 1
...
(1) fails to compile
is it possible to pass parameters to a decorator function?
Regards, Daniel
More information about the Python-list
mailing list