when an iterable object is exhausted or not
steve+comp.lang.python at pearwood.info
Sun Aug 5 02:47:02 CEST 2012
On Sat, 04 Aug 2012 12:44:07 -0700, Tim Roberts wrote:
>>$$$ i = filter(lambda c : c.isdigit(), 'a1b2c3')
>>$$$ for x in i : print(x,end=' ')
>>1 2 3
>>$$$ for x in i : print(x,end=' ') # i is exhausted
>>IMHO, this should not happen in Py3k.
> It's interesting that it DOESN'T happen in Python 2. The first "i" is
> of type list, the second "i" is of type string, and both are
> What's the type of "i" in the second case in Python 3?
In Python 3, filter returns a lazy iterator, a "filter object". It
generates items on demand.
In Python 2, filter is eager, not lazy, and generates items all up-front.
If the input is a string, it generates a string; if the input is a tuple,
it generates a tuple; otherwise it generates a list.
More information about the Python-list