[Raymond]:
> Can I suggest that next() and __next__() be dropped entirely
>  and that iterators just be made callable.

[GvR]
> This sounds attractive, except that I fear that 
> the optimizations we've implemented for calling 
> tp_next (especially for built-in iterators like 
> list or dict iterators). Since tp_call must be 
> usable in other contexts, and has much more 
> optional features, it will be hard to carry 
> these optimizations over.

I should mull this over for a bit.  It may be possible to keep the tp_iter slot 
for builtins and have the tp_call slot forward the invocation.  That keeps the 
speed for the C iterators, simplifies the API, and will still be faster than 
next() because it bypasses the method name lookup.

OTOH, I haven't thought this through and might encounter a roadblock when 
trying to implement it.


> It would also invalidate classes that serve as their
> own iterator (like files) and already implement
> __call__() for sa different purpose.

My thought here is that iterators should always be a separate object -- there 
is no good reason for dir(iter(myfile)) to expose methods that have nothing to 
do with iteration.  In the case of files, it would not be hard to have a 
singleton file-iterator object.

my-two-cents,


Raymond


P.S.  I have to credit David Mertz with being one of the original proponents of 
making iterators callable instead of pushing the functionality into the next() 
method.
_______________________________________________
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