Skip to content

Commit f83be4e

Browse files
committed
Added view and iterator types to collections / _abcoll
I've also renamed several of the iterators to keep a consistent naming schema.
1 parent c9543e4 commit f83be4e

7 files changed

Lines changed: 52 additions & 12 deletions

File tree

Lib/_abcoll.py

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,35 @@
1717
"MappingView", "KeysView", "ItemsView", "ValuesView",
1818
"Sequence", "MutableSequence",
1919
"ByteString",
20+
"bytearray_iterator", "bytes_iterator", "dict_itemiterator",
21+
"dict_items", "dict_keyiterator", "dict_keys",
22+
"dict_valueiterator", "dict_values", "list_iterator",
23+
"list_reverseiterator", "range_iterator", "set_iterator",
24+
"str_iterator", "tuple_iterator", "zip_iterator",
2025
]
2126

27+
28+
### collection related types which are not exposed through builtin ###
29+
## iterators ##
30+
bytes_iterator = type(iter(b''))
31+
bytearray_iterator = type(iter(bytearray()))
32+
#callable_iterator = ???
33+
dict_keyiterator = type(iter({}.keys()))
34+
dict_valueiterator = type(iter({}.values()))
35+
dict_itemiterator = type(iter({}.items()))
36+
list_iterator = type(iter([]))
37+
list_reverseiterator = type(iter(reversed([])))
38+
range_iterator = type(iter(range(0)))
39+
set_iterator = type(iter(set()))
40+
str_iterator = type(iter(""))
41+
tuple_iterator = type(iter(()))
42+
zip_iterator = type(iter(zip()))
43+
## views ##
44+
dict_keys = type({}.keys())
45+
dict_values = type({}.values())
46+
dict_items = type({}.items())
47+
48+
2249
### ONE-TRICK PONIES ###
2350

2451
class Hashable(metaclass=ABCMeta):
@@ -69,6 +96,19 @@ def __subclasshook__(cls, C):
6996
return True
7097
return NotImplemented
7198

99+
Iterator.register(bytes_iterator)
100+
Iterator.register(bytearray_iterator)
101+
#Iterator.register(callable_iterator)
102+
Iterator.register(dict_keyiterator)
103+
Iterator.register(dict_valueiterator)
104+
Iterator.register(dict_itemiterator)
105+
Iterator.register(list_iterator)
106+
Iterator.register(list_reverseiterator)
107+
Iterator.register(range_iterator)
108+
Iterator.register(set_iterator)
109+
Iterator.register(str_iterator)
110+
Iterator.register(tuple_iterator)
111+
Iterator.register(zip_iterator)
72112

73113
class Sized(metaclass=ABCMeta):
74114

@@ -349,7 +389,7 @@ def __iter__(self):
349389
for key in self._mapping:
350390
yield key
351391

352-
KeysView.register(type({}.keys()))
392+
KeysView.register(dict_keys)
353393

354394

355395
class ItemsView(MappingView, Set):
@@ -367,7 +407,7 @@ def __iter__(self):
367407
for key in self._mapping:
368408
yield (key, self._mapping[key])
369409

370-
ItemsView.register(type({}.items()))
410+
ItemsView.register(dict_items)
371411

372412

373413
class ValuesView(MappingView):
@@ -382,7 +422,7 @@ def __iter__(self):
382422
for key in self._mapping:
383423
yield self._mapping[key]
384424

385-
ValuesView.register(type({}.values()))
425+
ValuesView.register(dict_values)
386426

387427

388428
class MutableMapping(Mapping):

Objects/dictobject.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2148,7 +2148,7 @@ static PyObject *dictiter_iternextkey(dictiterobject *di)
21482148

21492149
PyTypeObject PyDictIterKey_Type = {
21502150
PyVarObject_HEAD_INIT(&PyType_Type, 0)
2151-
"dictionary-keyiterator", /* tp_name */
2151+
"dict_keyiterator", /* tp_name */
21522152
sizeof(dictiterobject), /* tp_basicsize */
21532153
0, /* tp_itemsize */
21542154
/* methods */
@@ -2220,7 +2220,7 @@ static PyObject *dictiter_iternextvalue(dictiterobject *di)
22202220

22212221
PyTypeObject PyDictIterValue_Type = {
22222222
PyVarObject_HEAD_INIT(&PyType_Type, 0)
2223-
"dictionary-valueiterator", /* tp_name */
2223+
"dict_valueiterator", /* tp_name */
22242224
sizeof(dictiterobject), /* tp_basicsize */
22252225
0, /* tp_itemsize */
22262226
/* methods */
@@ -2306,7 +2306,7 @@ static PyObject *dictiter_iternextitem(dictiterobject *di)
23062306

23072307
PyTypeObject PyDictIterItem_Type = {
23082308
PyVarObject_HEAD_INIT(&PyType_Type, 0)
2309-
"dictionary-itemiterator", /* tp_name */
2309+
"dict_itemiterator", /* tp_name */
23102310
sizeof(dictiterobject), /* tp_basicsize */
23112311
0, /* tp_itemsize */
23122312
/* methods */

Objects/iterobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ zipiter_next(zipiterobject *zit)
369369

370370
static PyTypeObject PyZipIter_Type = {
371371
PyVarObject_HEAD_INIT(0, 0)
372-
"zipiterator", /* tp_name */
372+
"zip_iterator", /* tp_name */
373373
sizeof(zipiterobject), /* tp_basicsize */
374374
0, /* tp_itemsize */
375375
/* methods */

Objects/listobject.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2726,7 +2726,7 @@ static PyMethodDef listiter_methods[] = {
27262726

27272727
PyTypeObject PyListIter_Type = {
27282728
PyVarObject_HEAD_INIT(&PyType_Type, 0)
2729-
"listiterator", /* tp_name */
2729+
"list_iterator", /* tp_name */
27302730
sizeof(listiterobject), /* tp_basicsize */
27312731
0, /* tp_itemsize */
27322732
/* methods */
@@ -2848,7 +2848,7 @@ static PySequenceMethods listreviter_as_sequence = {
28482848

28492849
PyTypeObject PyListRevIter_Type = {
28502850
PyVarObject_HEAD_INIT(&PyType_Type, 0)
2851-
"listreverseiterator", /* tp_name */
2851+
"list_reverseiterator", /* tp_name */
28522852
sizeof(listreviterobject), /* tp_basicsize */
28532853
0, /* tp_itemsize */
28542854
/* methods */

Objects/rangeobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ static PyMethodDef rangeiter_methods[] = {
369369

370370
PyTypeObject Pyrangeiter_Type = {
371371
PyVarObject_HEAD_INIT(&PyType_Type, 0)
372-
"rangeiterator", /* tp_name */
372+
"range_iterator", /* tp_name */
373373
sizeof(rangeiterobject), /* tp_basicsize */
374374
0, /* tp_itemsize */
375375
/* methods */

Objects/setobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,7 @@ static PyObject *setiter_iternext(setiterobject *si)
851851

852852
static PyTypeObject PySetIter_Type = {
853853
PyVarObject_HEAD_INIT(&PyType_Type, 0)
854-
"setiterator", /* tp_name */
854+
"set_iterator", /* tp_name */
855855
sizeof(setiterobject), /* tp_basicsize */
856856
0, /* tp_itemsize */
857857
/* methods */

Objects/unicodeobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9263,7 +9263,7 @@ static PyMethodDef unicodeiter_methods[] = {
92639263

92649264
PyTypeObject PyUnicodeIter_Type = {
92659265
PyVarObject_HEAD_INIT(&PyType_Type, 0)
9266-
"unicode_iterator", /* tp_name */
9266+
"str_iterator", /* tp_name */
92679267
sizeof(unicodeiterobject), /* tp_basicsize */
92689268
0, /* tp_itemsize */
92699269
/* methods */

0 commit comments

Comments
 (0)