Op 2005-01-18, Steve Holden schreef <[EMAIL PROTECTED]>:
> Antoon Pardon wrote:
>
>> Op 2005-01-18, Nick Coghlan schreef <[EMAIL PROTECTED]>:
>> 
>>>Raymond Hettinger wrote:
>>>
>>>>[Delaney, Timothy C]
>>>>
>>>>
>>>>>Nick's other suggestion - that genexps propagate __len__ - might
>>>>>still be interesting. Of course, it would only be applicable for
>>>>>unconditional genexps(i.e. no if clause).
>>>>
>>>>Length transparency for iterators is not as general as one would expect.  I 
>>>>once
>>>>spent a good deal of effort exploring where it made sense, and I was 
>>>>surprised
>>>>to find that it only rarely works out.  Length transparency is an 
>>>>unexpectedly
>>>>thorny subject with many dead-ends which precludes a fully general solution 
>>>>such
>>>>as that proposed by Nick.
>>>>
>>>>For a recap of my research, see the docstring for Lib/test/test_iterlen.py .
>>>
>>>"""The situation slightly more involved whenever an object allows length 
>>>mutation during iteration. """
>>>
>>>Ouch. Nice understatement.
>>>
>>>It's rather unfortunate that we can't make use of the length information 
>>>even 
>>>when the source *doesn't* mutate, though. I'll have to think some more to 
>>>see if 
>>>I can come up with any concrete ideas for you to shoot down :)
>> 
>> 
>> Something else I was thinking about. I think it would be nice if the
>> python compilor could figure out whether a genexp in a list or tuple
>> expression always generates the same list or tuple and then instead
>> of generating code would generate the list or tuple in place.
>> 
> Since it doesn't yet optimize 2+5 to a constant-folded 7 you should 
> realize that you are suggesting a large increase in the compiler's 
> analytical powers.

Well I can dream, cant I?

> I agree it would be nice under certain circumstances, but don't forget 
> that unlike list comprehensions (for which it would be even nicer) the 
> whole point of generator expressions is often to defer the generation of 
> the individual items until they are required and thereby relieve stress 
> on memory.
>
> As an edge case to demonstrate the point, what about a constant but 
> infinite sequence?

Maybe I was not clear enough. I meant to limit it to cases such as

   lst = list(genexp)
   tpl = tuple(genexp)


Since in such cases the object is build in memory any way, I don't
think it would be a problem of having them prebuilt in memory, or am
I missing something?

-- 
Antoon Pardon
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to