[Python-checkins] Minor improvement to the namedtuple implementation (GH-20741)

Raymond Hettinger webhook-mailer at python.org
Mon Jun 8 15:38:48 EDT 2020


https://github.com/python/cpython/commit/0a40849eb99a0357113bff10434ec6605e3ae96b
commit: 0a40849eb99a0357113bff10434ec6605e3ae96b
branch: master
author: Raymond Hettinger <rhettinger at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2020-06-08T12:38:41-07:00
summary:

Minor improvement to the namedtuple implementation (GH-20741)

* Cleaner way to build the arg list with a trailing comma when required

* Fix appearance of __new__ in help()

files:
M Lib/collections/__init__.py

diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index 1e3b54ccf9cc9..6a06cc6a64f16 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -399,7 +399,9 @@ def namedtuple(typename, field_names, *, rename=False, defaults=None, module=Non
     # Variables used in the methods and docstrings
     field_names = tuple(map(_sys.intern, field_names))
     num_fields = len(field_names)
-    arg_list = repr(field_names).replace("'", "")[1:-1]
+    arg_list = ', '.join(field_names)
+    if num_fields == 1:
+        arg_list += ','
     repr_fmt = '(' + ', '.join(f'{name}=%r' for name in field_names) + ')'
     tuple_new = tuple.__new__
     _dict, _tuple, _len, _map, _zip = dict, tuple, len, map, zip
@@ -410,6 +412,7 @@ def namedtuple(typename, field_names, *, rename=False, defaults=None, module=Non
     namespace = {'_tuple_new': tuple_new,  '__builtins__': None,
                  '__name__': f'namedtuple_{typename}'}
     __new__ = eval(s, namespace)
+    __new__.__name__ = '__new__'
     __new__.__doc__ = f'Create new instance of {typename}({arg_list})'
     if defaults is not None:
         __new__.__defaults__ = defaults



More information about the Python-checkins mailing list