generator expressions: performance anomaly?
Antoon Pardon
apardon at forel.vub.ac.be
Tue Jan 18 06:21:38 EST 2005
Op 2005-01-18, Nick Coghlan schreef <ncoghlan at iinet.net.au>:
> 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.
--
Antoon Pardon
More information about the Python-list
mailing list