Issue 22547: Implement informative __repr__ for inspect.BoundArguments
diff --git a/Lib/inspect.py b/Lib/inspect.py
index ef2407c..9290b4b 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -2460,6 +2460,13 @@
     def __getstate__(self):
         return {'_signature': self._signature, 'arguments': self.arguments}
 
+    def __repr__(self):
+        args = []
+        for arg, value in self.arguments.items():
+            args.append('{}={!r}'.format(arg, value))
+        return '<{} at {:#x} ({})>'.format(self.__class__.__name__,
+                                           id(self), ', '.join(args))
+
 
 class Signature:
     """A Signature object represents the overall signature of a function.
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index bbb7afa..6f813be 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -3149,6 +3149,13 @@
                 ba_pickled = pickle.loads(pickle.dumps(ba, ver))
                 self.assertEqual(ba, ba_pickled)
 
+    def test_signature_bound_arguments_repr(self):
+        def foo(a, b, *, c:1={}, **kw) -> {42:'ham'}: pass
+        sig = inspect.signature(foo)
+        ba = sig.bind(20, 30, z={})
+        self.assertRegex(repr(ba),
+                         r'<BoundArguments at 0x[a-fA-F0-9]+ \(a=20,.*\}\}\)>')
+
 
 class TestSignaturePrivateHelpers(unittest.TestCase):
     def test_signature_get_bound_param(self):