[Python-Dev] Confusing listreverseiterator Behavior (original) (raw)

Georg Brandl g.brandl at gmx.net
Tue Aug 26 22:30:56 CEST 2008


Jeff Hall schrieb:

I realized after I fired off my response that this was still bugging me... it appears that the documentation is incorrect

from 2.1 Built-in Functions (v2.5 in case it matters... a quick search of bugs doesn't seem to show anything though) reversed( seq) Return a reverse iterator. seq must be an object which supports the sequence protocol (the len() method and the getitem() method with integer arguments starting at |0|). New in version 2.4. the above appears to only be true for lists.

Not at all. (I think you misread; the len method must be present on the argument, not the returned object.)

For tuples and strings it creates a reverse OBJECT which behaves slightly differently (notably by not including a len() method as you noticed)

I can't find how to actually create a "tuplereverseiterator" or "stringreverseiterator" objects... nor does there appear to be a way to create a "reversed" object from a list...

You don't need to. An object returned by reversed() only needs to follow the iterator protocol. Whether it is a listreverseiterator or a general reversed object doesn't matter.

In fact, reversed() calls reversed on its argument if it exists, so that custom types may provide their own optimized reverse iterator.

Georg



More information about the Python-Dev mailing list