[New-bugs-announce] [issue7439] Bug or expected behavior? I cannot tell.

David W. Lambert report at bugs.python.org
Sat Dec 5 07:08:23 CET 2009

New submission from David W. Lambert <b49P23TIvg at stny.rr.com>:

Raymond Hettinger posted clever Hamming number generator,
which I tried to modify.  The function gives incorrect output when
called as hamming_numbers(shorthand = True).  It seemed reasonable to
expect the two arrangements of statements controlled by the shorthand
boolean to be functionally equivalent. 
http://docs.python.org/3.1/reference/executionmodel.html is relevant,
and makes me think this is not a bug, but I wish it were.  I'd
appreciate your determination.  Thanks, Dave.

from itertools import tee, chain, islice, groupby
from heapq import merge

def hamming_numbers(shorthand = False):

    def deferred_output():
        for i in output:
            yield i

    result, p2, p3, p5 = tee(deferred_output(), 4)

    if shorthand:                   # Lambert modification
        m = [(a*x for x in p) for (a,p,) in ((2,p2),(3,p3),(5,p5))]
        assert m[0] is not m[2]
        merged = merge(*m)
    else:                           # original
        m2 = (2*x for x in p2)
        m3 = (3*x for x in p3)
        m5 = (5*x for x in p5)
        merged = merge(m2, m3, m5)

    combined = chain([1], merged)
    output = (k for k, v in groupby(combined))

    return result

if __name__ == '__main__':
    print(list(islice(hamming_numbers(), 10)))
    print(list(islice(hamming_numbers(True), 10)))

components: Interpreter Core
messages: 95981
nosy: LambertDW
severity: normal
status: open
title: Bug or expected behavior?  I cannot tell.
type: behavior
versions: Python 3.1

Python tracker <report at bugs.python.org>

More information about the New-bugs-announce mailing list