From: vsoler on 27 Mar 2010 11:24 Hi, Still learning Python, now decorators. Before diving deeply into decorators, I'd like to apply a function to another function. My "extremely simple function" should print number 3, then the sum of its 2 arguments. Say that I call f(5,7) I'd like to get, somehow, 3 then 12. I've tried the following: def d(f): print 3 return f def f(a, b): print a+b f=d(f) However, it does not work. Calling f(5,7) only returns 12, (3 is missing) How should I proceed?
From: Patrick Maupin on 27 Mar 2010 12:06 On Mar 27, 10:24 am, vsoler <vicente.so...(a)gmail.com> wrote: > Hi, > > Still learning Python, now decorators. > > Before diving deeply into decorators, I'd like to apply a function to > another function. > > My "extremely simple function" should print number 3, then the sum of > its 2 arguments. > > Say that I call f(5,7) > I'd like to get, somehow, 3 then 12. > > I've tried the following: > > def d(f): > print 3 > return f > > def f(a, b): > print a+b > > f=d(f) > > However, it does not work. Calling f(5,7) only returns 12, (3 is > missing) > How should I proceed? >>> def d(f): .... def wrapper(*args): .... print 3 .... return f(*args) .... return wrapper .... >>> def f(a, b): .... print a + b .... >>> f = d(f) >>> f(5, 7) 3 12 HTH, Pat
From: vsoler on 27 Mar 2010 12:21 On 27 mar, 17:06, Patrick Maupin <pmau...(a)gmail.com> wrote: > On Mar 27, 10:24 am, vsoler <vicente.so...(a)gmail.com> wrote: > > > > > Hi, > > > Still learning Python, now decorators. > > > Before diving deeply into decorators, I'd like to apply a function to > > another function. > > > My "extremely simple function" should print number 3, then the sum of > > its 2 arguments. > > > Say that I call f(5,7) > > I'd like to get, somehow, 3 then 12. > > > I've tried the following: > > > def d(f): > > print 3 > > return f > > > def f(a, b): > > print a+b > > > f=d(f) > > > However, it does not work. Calling f(5,7) only returns 12, (3 is > > missing) > > How should I proceed? > >>> def d(f): > > ... def wrapper(*args): > ... print 3 > ... return f(*args) > ... return wrapper > ...>>> def f(a, b): > > ... print a + b > ...>>> f = d(f) > >>> f(5, 7) > > 3 > 12 > > HTH, > Pat Pat, I think some lines are missing. I don't see "d" function defined. Any lines above def wrapper? Thank you
From: vsoler on 27 Mar 2010 12:24 On 27 mar, 17:21, vsoler <vicente.so...(a)gmail.com> wrote: > On 27 mar, 17:06, Patrick Maupin <pmau...(a)gmail.com> wrote: > > > > > On Mar 27, 10:24 am, vsoler <vicente.so...(a)gmail.com> wrote: > > > > Hi, > > > > Still learning Python, now decorators. > > > > Before diving deeply into decorators, I'd like to apply a function to > > > another function. > > > > My "extremely simple function" should print number 3, then the sum of > > > its 2 arguments. > > > > Say that I call f(5,7) > > > I'd like to get, somehow, 3 then 12. > > > > I've tried the following: > > > > def d(f): > > > print 3 > > > return f > > > > def f(a, b): > > > print a+b > > > > f=d(f) > > > > However, it does not work. Calling f(5,7) only returns 12, (3 is > > > missing) > > > How should I proceed? > > >>> def d(f): > > > ... def wrapper(*args): > > ... print 3 > > ... return f(*args) > > ... return wrapper > > ...>>> def f(a, b): > > > ... print a + b > > ...>>> f = d(f) > > >>> f(5, 7) > > > 3 > > 12 > > > HTH, > > Pat > > Pat, > > I think some lines are missing. I don't see "d" function defined. Any > lines above def wrapper? > > Thank you Patrick, I see what happened. The first line was somehow hidden. Thank you very much. Vicente Soler
From: Patrick Maupin on 27 Mar 2010 14:07 On Mar 27, 11:24 am, vsoler <vicente.so...(a)gmail.com> wrote: > I see what happened. The first line was somehow hidden. > Thank you very much. You're welcome. Sorry about the formatting. Also, note that if your decorator is complicated, you might want to use a class instead of a nested function. Here's the same thing, using a class (and using the actual decorator syntax): class d(object): def __init__(self, func): self.func = func def __call__(self, *args): print 3 return self.func(*args) @d def f(a, b): print a + b f(5, 7) Pat
|
Next
|
Last
Pages: 1 2 Prev: Call for papers (Deadline Extended): SETP-10, USA, July 2010 Next: Ipython(x,y) Won't Run |