Terry Reedy於 2012年9月15日星期六UTC+8上午4時40分32秒寫道: > 2nd try, hit send button by mistake before > > > > On 9/14/2012 5:28 AM, Jean-Michel Pichavant wrote: > > > > > Decorators are very popular so I kinda already know that the fault is > > > mine. Now to the reason why I have troubles writing them, I don't > > > know. Every time I did use decorators, I spent way too much time > > > writing it (and debugging it). > > > > You are writing parameterized decorators, which require inverted > > currying of the wrapper maker. Perhaps that is why you have trouble. As > > I showed in response to Cameron, it may be easier to avoid that by using > > a traditional post-def wrapping call instead of decorator syntax. > > > > -- > > Terry Jan Reedy
I'll give another example to show the decorators in python in versions above 2.4 . # a general function with the variable input : def fname( *argc, **argn) # a deco is a mapping from an input funtion to another function def deco( fn, *list_in, **dict_in): # use list_in and dict_in to modify fn """ deco wrapper """ # deco.__doc__ #print list_in, dict_in, " in the deco" def wrapper( fn, *argc, **argan): # to be returned as a function # do things one wants before calling fn result=fn(*argc, **argn) # call the original, save the result # do things after calling fn return result # enhance the wrapper and get info of fn wrapper.__doc__=fn.__doc__ # enhance wrapper with result, fn, list_in, dict_in #.... return wrapper def f1(): """ doc of f1""" print "inside f1" f2=deco(f1, 2,3,4,5,6, MSG="deco f1 to f2") f2() # invoke the decorated function from f1 # For a deco maps a deco to another deco can be done similarly -- http://mail.python.org/mailman/listinfo/python-list