◐ Shell
reader mode source ↗
Skip to content
Closed
Hide file tree
Changes from all commits
File filter
Conversations
Jump to
Diff view
Apply and reload
Show whitespace
Diff view
Apply and reload
16 changes: 7 additions & 9 deletions Lib/collections/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,10 @@ def __eq__(self, other):
### namedtuple
################################################################################

_nt_itemgetters = {}

def namedtuple(typename, field_names, *, rename=False, module=None):
"""Returns a new subclass of tuple with named fields.
Expand Up @@ -427,15 +430,10 @@ def __getnewargs__(self):
'_asdict': _asdict,
'__getnewargs__': __getnewargs__,
}
cache = _nt_itemgetters
for index, name in enumerate(field_names):
try:
itemgetter_object, doc = cache[index]
except KeyError:
itemgetter_object = _itemgetter(index)
doc = f'Alias for field number {index}'
cache[index] = itemgetter_object, doc
class_namespace[name] = property(itemgetter_object, doc=doc)

result = type(typename, (tuple,), class_namespace)

Expand Down
22 changes: 22 additions & 0 deletions Modules/_collectionsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -2354,6 +2354,28 @@ _count_elements(PyObject *self, PyObject *args)
Py_RETURN_NONE;
}

/* module level code ********************************************************/

PyDoc_STRVAR(module_doc,
Expand Down
Toggle all file notes Toggle all file annotations