help with generators

Mayer gmayer at cs.bgu.ac.il
Wed May 18 20:17:50 EDT 2005


Hello:

I need some help in understanding generators. I get them to work in
simple cases, but the following example puzzles me. Consider the
non-generator, "ordinary" procedure:

def foo(n):
    s = []
    def foo(n):
        if n == 0:
            print s
        else:
            s.append(0)
            foo(n - 1)
            s.pop()
            s.append(1)
            foo(n - 1)
            s.pop()
    foo(n)

foo(n) prints all n-bit-wide binary numbers as a list. I would now like
to create a generator for such numbers:

def bin(n):
    s = []
    def bin(n):
        if n == 0:
            yield s
        else:
            s.append(0)
            bin(n - 1)
            s.pop()
            s.append(1)
            bin(n - 1)
            s.pop()
    return bin(n)

yet this doesn't work as expected. Can someone please explain why?

Thanks,

Mayer Goldberg




More information about the Python-list mailing list