On 3/23/06, Ian Bicking <[EMAIL PROTECTED]> wrote:
[Guido]
> > Testing whether an iterator is empty or not is an oxymoron; the only
> > legit way is to call next() and see whether it raises StopIteration.
> > This is the fundamental confusion I am talking about. It is NOT
> > "natural enough". It reveals a fundamental misunderstanding of the
> > design of the iterator protocol.
>
> I'm talking about a use case, not the protocol.  Where iterators are
> used, it is very common that you also want to distinguish between zero
> and some items.

Really? Methinks you are thinking of a fairly specific context -- when
presenting database query results to a user. The problem IMO lies in
SQLObject (which I admit I've never used) or perhaps in SQL itself, or
the specific underlying DB. In most other situations, you have an
honest-to-god container (e.g. a dict) which you can test for emptiness
before even asking for an iterator over its items. When all you have
is a query represented as an iterator this doesn't fly. That's why
some DB API implementations return the number of results as the
non-standard return value of the query API (at least that's what I
recall -- it's been a while since I used the DB API).

> The use case isn't odd or confused or oxymoronic --
> it's very natural.  The problem is that the natural and common use case
> doesn't translate into nice Python when you use iterators.

There's no reason why the *specific* iterator returned by a query
can't have an additional API to inquire whether it returned any
results at all, or an exact result count; IIRC next() is but one of
the many methods of query results.

But this doesn't generalize to a flaw in the iterator protocol per se.

--
--Guido van Rossum (home page: http://www.python.org/~guido/)
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to