Robert Kern wrote: > Timothy Wu wrote: >> Hi, >> >> Using generator recursively is not doing what I expect: >> >> def test_gen(x): >> yield x >> x = x - 1 >> if x != 0: >> test_gen(x) > > The only thing that the last line does is *create* a new generator object. You > need to actually iterate over it and yield its values. E.g. > > > In [2]: def test_gen(x): > ...: yield x > ...: x -= 1 > ...: if x != 0: > ...: for y in test_gen(x): > ...: yield y > ...: > ...: > > In [3]: list(test_gen(3)) > Out[3]: [3, 2, 1] > >
why not this? def test_gen(x): for y in xrange(x,0,-1): yield y or even better/shorter: test_gen = lambda x: xrange(x,0,-1) -- http://mail.python.org/mailman/listinfo/python-list