mirror of https://github.com/python/cpython
Issue #25628: Make namedtuple "rename" and "verbose" parameters keyword-only.
This commit is contained in:
parent
3ee933f1c3
commit
6538b430cf
|
@ -763,7 +763,7 @@ Named tuples assign meaning to each position in a tuple and allow for more reada
|
|||
self-documenting code. They can be used wherever regular tuples are used, and
|
||||
they add the ability to access fields by name instead of position index.
|
||||
|
||||
.. function:: namedtuple(typename, field_names, verbose=False, rename=False)
|
||||
.. function:: namedtuple(typename, field_names, *, verbose=False, rename=False)
|
||||
|
||||
Returns a new tuple subclass named *typename*. The new subclass is used to
|
||||
create tuple-like objects that have fields accessible by attribute lookup as
|
||||
|
@ -799,7 +799,11 @@ they add the ability to access fields by name instead of position index.
|
|||
a namedtuple.
|
||||
|
||||
.. versionchanged:: 3.1
|
||||
Added support for *rename*.
|
||||
Added support for *rename*.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
The *verbose* and *rename* parameters became
|
||||
:ref:`keyword-only arguments <keyword-only_parameter>`.
|
||||
|
||||
|
||||
.. doctest::
|
||||
|
|
|
@ -353,7 +353,7 @@ _field_template = '''\
|
|||
{name} = _property(_itemgetter({index:d}), doc='Alias for field number {index:d}')
|
||||
'''
|
||||
|
||||
def namedtuple(typename, field_names, verbose=False, rename=False):
|
||||
def namedtuple(typename, field_names, *, verbose=False, rename=False):
|
||||
"""Returns a new subclass of tuple with named fields.
|
||||
|
||||
>>> Point = namedtuple('Point', ['x', 'y'])
|
||||
|
|
|
@ -412,6 +412,18 @@ class TestNamedTuple(unittest.TestCase):
|
|||
self.assertEqual(NTColor._fields, ('red', 'green', 'blue'))
|
||||
globals().pop('NTColor', None) # clean-up after this test
|
||||
|
||||
def test_keyword_only_arguments(self):
|
||||
# See issue 25628
|
||||
with support.captured_stdout() as template:
|
||||
NT = namedtuple('NT', ['x', 'y'], verbose=True)
|
||||
self.assertIn('class NT', NT._source)
|
||||
with self.assertRaises(TypeError):
|
||||
NT = namedtuple('NT', ['x', 'y'], True)
|
||||
|
||||
NT = namedtuple('NT', ['abc', 'def'], rename=True)
|
||||
self.assertEqual(NT._fields, ('abc', '_1'))
|
||||
with self.assertRaises(TypeError):
|
||||
NT = namedtuple('NT', ['abc', 'def'], False, True)
|
||||
|
||||
def test_namedtuple_subclass_issue_24931(self):
|
||||
class Point(namedtuple('_Point', ['x', 'y'])):
|
||||
|
|
|
@ -73,6 +73,9 @@ Library
|
|||
to ref count problem introduced in code for Issue #27038 in 3.6.0a3.
|
||||
Patch by Xiang Zhang.
|
||||
|
||||
- Issue #25628: The *verbose* and *rename* parameters for collections.namedtuple
|
||||
are now keyword-only.
|
||||
|
||||
- Issue #12345: Add mathemathical constant tau to math and cmath. See also
|
||||
PEP 628.
|
||||
|
||||
|
|
Loading…
Reference in New Issue