yield i
vereq(list(tuple(f())), range(1000))
-# Verify that __getitem__ overrides are recognized by __iter__
+# Verify that __getitem__ overrides are not recognized by __iter__
class T(tuple):
def __getitem__(self, key):
return str(key) + '!!!'
-vereq(iter(T()).next(), '0!!!')
+vereq(iter(T((1,2))).next(), 1)
print '6.5.3 Lists'
# calling built-in types without argument must return empty
a[::2] = tuple(range(5))
vereq(a, [0, 1, 1, 3, 2, 5, 3, 7, 4, 9])
-# Verify that __getitem__ overrides are recognized by __iter__
+# Verify that __getitem__ overrides are not recognized by __iter__
class L(list):
def __getitem__(self, key):
return str(key) + '!!!'
-vereq(iter(L()).next(), '0!!!')
+vereq(iter(L([1,2])).next(), 1)
print '6.6 Mappings == Dictionaries'
- The softspace attribute of file objects became read-only by oversight.
It's writable again.
+- Reverted a 2.3 beta 1 change to iterators for subclasses of list and
+ tuple. By default, the iterators now access data elements directly
+ instead of going through __getitem__. If __getitem__ access is
+ preferred, then __iter__ can be overriden.
+
Extension modules
-----------------
PyErr_BadInternalCall();
return NULL;
}
- if (seq->ob_type->tp_as_sequence->sq_item != (intargfunc)list_item)
- return PySeqIter_New(seq);
it = PyObject_GC_New(listiterobject, &PyListIter_Type);
if (it == NULL)
return NULL;
PyErr_BadInternalCall();
return NULL;
}
- if (seq->ob_type->tp_as_sequence->sq_item != (intargfunc)tupleitem)
- return PySeqIter_New(seq);
it = PyObject_GC_New(tupleiterobject, &PyTupleIter_Type);
if (it == NULL)
return NULL;