• Guido van Rossum's avatar
    Mondo changes to the iterator stuff, without changing how Python code · 213c7a6a
    Guido van Rossum yazdı
    sees it (test_iter.py is unchanged).
    
    - Added a tp_iternext slot, which calls the iterator's next() method;
      this is much faster for built-in iterators over built-in types
      such as lists and dicts, speeding up pybench's ForLoop with about
      25% compared to Python 2.1.  (Now there's a good argument for
      iterators. ;-)
    
    - Renamed the built-in sequence iterator SeqIter, affecting the C API
      functions for it.  (This frees up the PyIter prefix for generic
      iterator operations.)
    
    - Added PyIter_Check(obj), which checks that obj's type has a
      tp_iternext slot and that the proper feature flag is set.
    
    - Added PyIter_Next(obj) which calls the tp_iternext slot.  It has a
      somewhat complex return condition due to the need for speed: when it
      returns NULL, it may not have set an exception condition, meaning
      the iterator is exhausted; when the exception StopIteration is set
      (or a derived exception class), it means the same thing; any other
      exception means some other error occurred.
    213c7a6a
iterobject.c 5.15 KB