diff options
author | Jens Reidel <jens@troet.org> | 2020-03-18 02:22:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-18 02:22:46 (GMT) |
commit | 611836a69a7a98bb106b4d315ed76a1e17266f4f (patch) | |
tree | 6278f684b11a7417b34a4335552dfd6ff1c0ccfe | |
parent | 29356e03d4f8800b04f799efe7a10e3ce8b16f61 (diff) | |
download | cpython-611836a69a7a98bb106b4d315ed76a1e17266f4f.zip cpython-611836a69a7a98bb106b4d315ed76a1e17266f4f.tar.gz cpython-611836a69a7a98bb106b4d315ed76a1e17266f4f.tar.bz2 |
bpo-39957: Change Signature.parameters to OrderedDict (GH-18988)
-rw-r--r-- | Lib/inspect.py | 8 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 7 |
2 files changed, 10 insertions, 5 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index 125bd45..90435a1 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -2733,7 +2733,7 @@ class Signature: A Signature object has the following public attributes and methods: - * parameters : dict + * parameters : OrderedDict An ordered mapping of parameters' names to the corresponding Parameter objects (keyword-only arguments are in the same order as listed in `code.co_varnames`). @@ -2763,10 +2763,10 @@ class Signature: """ if parameters is None: - params = {} + params = OrderedDict() else: if __validate_parameters__: - params = {} + params = OrderedDict() top_kind = _POSITIONAL_ONLY kind_defaults = False @@ -2805,7 +2805,7 @@ class Signature: params[name] = param else: - params = {param.name: param for param in parameters} + params = OrderedDict((param.name, param) for param in parameters) self._parameters = types.MappingProxyType(params) self._return_annotation = return_annotation diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 8a2efc8..f193807 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -2077,7 +2077,7 @@ class TestSignatureObject(unittest.TestCase): P = inspect.Parameter self.assertEqual(str(S()), '()') - self.assertEqual(repr(S().parameters), 'mappingproxy({})') + self.assertEqual(repr(S().parameters), 'mappingproxy(OrderedDict())') def test(po, pk, pod=42, pkd=100, *args, ko, **kwargs): pass @@ -3181,6 +3181,11 @@ class TestSignatureObject(unittest.TestCase): l = list(signature.parameters) self.assertEqual(l, unsorted_keyword_only_parameters) + def test_signater_parameters_is_ordered(self): + p1 = inspect.signature(lambda x, y: None).parameters + p2 = inspect.signature(lambda y, x: None).parameters + self.assertNotEqual(p1, p2) + class TestParameterObject(unittest.TestCase): def test_signature_parameter_kinds(self): |