[Python-checkins] bpo-39957: Change Signature.parameters to OrderedDict (GH-18988)

Jens Reidel webhook-mailer at python.org
Tue Mar 17 22:22:50 EDT 2020


https://github.com/python/cpython/commit/611836a69a7a98bb106b4d315ed76a1e17266f4f
commit: 611836a69a7a98bb106b4d315ed76a1e17266f4f
branch: master
author: Jens Reidel <jens at troet.org>
committer: GitHub <noreply at github.com>
date: 2020年03月18日T11:22:46+09:00
summary:
bpo-39957: Change Signature.parameters to OrderedDict (GH-18988)
files:
M Lib/inspect.py
M Lib/test/test_inspect.py
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 125bd456a1c46..90435a10caac7 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 @@ def __init__(self, parameters=None, *, return_annotation=_empty,
 """
 
 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 @@ def __init__(self, parameters=None, *, return_annotation=_empty,
 
 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 8a2efc879323f..f193807e80473 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -2077,7 +2077,7 @@ def test_signature_object(self):
 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 @@ def test_signature_definition_order_preserved_on_kwonly(self):
 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):


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /