PEP 289: Generator Expressions (please comment)

Skip Montanaro skip at pobox.com
Fri Oct 24 09:42:29 EDT 2003


    >> sum(x*x for x in roots)
    >> min(d.temperature()*9/5 + 32 for d in days)
    >> Set(word.lower() for word in text.split() if len(word) < 5)
    >> dict( (k, somefunc(k)) for k in keylist )
    >> dotproduct = sum(x*y for x,y in itertools.izip(xvec, yvec))
    >> bestplayer, bestscore = max( (p.score, p.name) for p in players )

    Holger> Although most people on python-dev and here seems to like this
    Holger> PEP I think it generally decreases readability.  The above
    Holger> constructs seem heavy and difficult to parse and thus i am
    Holger> afraid that they interfere with the perceived simplicity of
    Holger> Python's syntax.

Of course, you can do all of these things today by just turning the args
into list comprehensions:

    sum([x*x for x in roots])
    min([d.temperature()*9/5 + 32 for d in days])
    Set([word.lower() for word in text.split() if len(word) < 5])
    dict([(k, somefunc(k)) for k in keylist])
    dotproduct = sum([x*y for x,y in itertools.izip(xvec, yvec)])
    bestplayer, bestscore = max([(p.score, p.name) for p in players])

    [regarding the proposed generator expressions, not my listcomp examples]
    >> Each of the above runs without creating a full list in memory, which
    >> saves allocation time, conserves resources, and exploits cache
    >> locality.

Which can be a sticking point for using list comprehensions.  With generator
expressions in place, list comprehensions become just syntactic sugar for 

    list(generator expression)

Alex Martelli demonstrated some performance improvements (about 2-to-1 I
think) of generator expressions over the equivalent list comprehensions.

    Holger> At least I hope that generator expressions will only be
    Holger> introduced via a __future__ statement in Python 2.4 much like it
    Holger> happened with 'yield' and generators.  Maybe the PEP should have
    Holger> an "implementation plan" chapter mentioning such details?

I think the plan is to make them available in 2.4.  I don't think there's
any plan for a __future__ import because they won't change the semantics of
any existing constructs.

Skip





More information about the Python-list mailing list