decorator problem

88888 Dihedral dihedral88888 at googlemail.com
Tue Jan 10 01:49:29 EST 2012


Chris Rebert於 2012年1月10日星期二UTC+8下午1時15分53秒寫道:
> On Mon, Jan 9, 2012 at 8:14 PM, contro opinion <contro... at gmail.com> wrote:
> > test1.py
> >
> > def deco(func):
> >      print 'i am in deco'
> >
> > @deco
> > def test():
> >      print 'i am in test'
> >
> >
> > when you run it ,you get :
> > i am in deco
> >
> >
> >
> > test2.py
> >
> > def tsfunc(func):
> >      def wrappedFunc():
> >           print 'i am in deco'
> >           return func()
> >       return wrappedFunc
> >
> > @tsfunc
> > def test():
> >     print "i am in test"
> >
> > when you run test2.py,you can get nothing ,why can't i get :??
> > i am in deco
> 
Try to add testgen=test() or testgent=test in test2.py 

testgen() # a function is an object,  

Also you can wrap a function to use yield instead of return. 

It is trivial to get a call back function in python by a decorator
that wraps a non-call back function. 






> Because that `print` is in wrappedFunc() [which in this case is A.K.A.
> test()], which is only defined, never called. Try adding a call to
> test() at the end of your script.
> Contrast this with deco(), which has the `print` directly in its body
> rather than inside a nested function definition.
> 
> Also, might I suggest reading a tutorial on decorators or asking on an
> IRC channel, rather than pelting the mailing list with all these
> simple and related questions in such a fairly short timeframe?
> At least please keep all these in a single thread instead of starting
> a new one every single time...
> 
> Cheers,
> Chris




More information about the Python-list mailing list