Simple Recursive Generator Question
__peter__ at web.de
Fri Dec 19 20:39:36 CET 2003
> I am trying to write a generator function that yields the index position
> of each set bit in a mask.
> for x in bitIndexGenerator(0x16): #10110
> print x
> --> 1 2 4
> This is what I have, but it does not work.
> Changing yield to print, shows that the recursion works correctly.
> def bitIndexGenerator(mask, index=0):
> if mask == 0: return
> elif mask & 0x1: yield index
> bitIndexGenerator(mask >> 1, index+1)
> What am I missing?
The bitIndexGenerator(mask>>1, index+1) just returns a new generator which
is immediately discarded. For a generator to do anything, you must invoke
its next() method, and one way to do it is a for loop, e. g (not mask<0
>>> def big(mask, index=0):
... if mask != 0:
... if mask & 1:
... yield index
... for result in big(mask>>1, index+1):
... yield result
>>> for x in big(0x16):
... print x,
1 2 4
More information about the Python-list