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