Skip to content

Commit 611836a

Browse files
authored
bpo-39957: Change Signature.parameters to OrderedDict (GH-18988)
1 parent 29356e0 commit 611836a

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

Lib/inspect.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2733,7 +2733,7 @@ class Signature:
27332733
27342734
A Signature object has the following public attributes and methods:
27352735
2736-
* parameters : dict
2736+
* parameters : OrderedDict
27372737
An ordered mapping of parameters' names to the corresponding
27382738
Parameter objects (keyword-only arguments are in the same order
27392739
as listed in `code.co_varnames`).
@@ -2763,10 +2763,10 @@ def __init__(self, parameters=None, *, return_annotation=_empty,
27632763
"""
27642764

27652765
if parameters is None:
2766-
params = {}
2766+
params = OrderedDict()
27672767
else:
27682768
if __validate_parameters__:
2769-
params = {}
2769+
params = OrderedDict()
27702770
top_kind = _POSITIONAL_ONLY
27712771
kind_defaults = False
27722772

@@ -2805,7 +2805,7 @@ def __init__(self, parameters=None, *, return_annotation=_empty,
28052805

28062806
params[name] = param
28072807
else:
2808-
params = {param.name: param for param in parameters}
2808+
params = OrderedDict((param.name, param) for param in parameters)
28092809

28102810
self._parameters = types.MappingProxyType(params)
28112811
self._return_annotation = return_annotation

Lib/test/test_inspect.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2077,7 +2077,7 @@ def test_signature_object(self):
20772077
P = inspect.Parameter
20782078

20792079
self.assertEqual(str(S()), '()')
2080-
self.assertEqual(repr(S().parameters), 'mappingproxy({})')
2080+
self.assertEqual(repr(S().parameters), 'mappingproxy(OrderedDict())')
20812081

20822082
def test(po, pk, pod=42, pkd=100, *args, ko, **kwargs):
20832083
pass
@@ -3181,6 +3181,11 @@ def test_signature_definition_order_preserved_on_kwonly(self):
31813181
l = list(signature.parameters)
31823182
self.assertEqual(l, unsorted_keyword_only_parameters)
31833183

3184+
def test_signater_parameters_is_ordered(self):
3185+
p1 = inspect.signature(lambda x, y: None).parameters
3186+
p2 = inspect.signature(lambda y, x: None).parameters
3187+
self.assertNotEqual(p1, p2)
3188+
31843189

31853190
class TestParameterObject(unittest.TestCase):
31863191
def test_signature_parameter_kinds(self):

0 commit comments

Comments
 (0)