[Python-Dev] [872326] generator expression implementation

jiwon jiwon at softwise.co.kr
Mon Jan 12 21:53:05 EST 2004


I'm the originator of the patch (SF patch 872326 - generator expression).
If "immediate evaluation of expr in generator expression" means that
generator expression:

(x for x in range())

should be equivalent to:

def __foo(_range=range()):
    for x in _range:
        yield x

it seems to me that generator expression has almost no merit over list
comprehension.
I think the merit of generator is that it does not need to allocate all the
memory that it needs in the initial time, right?
Or, am I confusing something? :)

Regards,
Jiwon.


----- Original Message ----- 
From: "Michael Hudson" <mwh at python.net>
To: <python-dev at python.org>
Sent: Tuesday, January 13, 2004 12:55 AM
Subject: Re: [Python-Dev] [872326] generator expression implementation


> Jeremy Hylton <jeremy at alum.mit.edu> writes:
>
> > On Mon, 2004-01-12 at 05:58, Armin Rigo wrote:
> >> Sorry to bring this out again, I didn't find a reference about the
following
> >> issue in generator expressions:
> >>
> >>   (for x in expr)
> >>
> >> When should 'expr' be evaluated?  A priori, one would expect it to be
> >> evaluated immediately, but it is not what the suggested implementation
does:
> >>
> >> def __gen():
> >>   for x in expr:
> >>     yield x
> >> __gen()
> >
> > First a quick clarification:  Is the "suggested implementation" SF patch
> > 872326 or is it that implementation sketch in PEP 289?  The latter
> > certainly suggests it, but it's hard to tell even then if it's
> > intentional.  Perhaps we should work out the formal specification part
> > of the PEP in parallel with the implementation.  The PEP currently says
> > that the reference manual should contain a specification, but that spec
> > is supposed to be part of the PEP, too.
> >
> > I agree, at any rate, that the expression should be evaluated
> > immediately.  That's easy enough to implement:
> >
> > def __gen(it):
> >     for x in it:
> >         yield x
> > __gen()
>
> Should be __gen(expr), right?
>
> Cheers,
> mwh
>
> -- 
>   For their next act, they'll no doubt be buying a firewall
>   running under NT, which makes about as much sense as
>   building a prison out of meringue.                     -- -:Tanuki:-
>                -- http://home.xnet.com/~raven/Sysadmin/ASR.Quotes.html




More information about the Python-Dev mailing list