summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Allen <ja.py@farowl.co.uk>2022-09-22 18:10:15 (GMT)
committerGitHub <noreply@github.com>2022-09-22 18:10:15 (GMT)
commit9d432b4a181cd42017699de4354e7b36c5b87d88 (patch)
tree4fb59cb90fc0556032f4c560b61da156a64c5e9a
parent282edd7b2a74c4dfe1bfe3c5b1d30f9c21d554d6 (diff)
downloadcpython-9d432b4a181cd42017699de4354e7b36c5b87d88.zip
cpython-9d432b4a181cd42017699de4354e7b36c5b87d88.tar.gz
cpython-9d432b4a181cd42017699de4354e7b36c5b87d88.tar.bz2
gh-96397: Document that keywords in calls need not be identifiers (#96393)
This represents the official SC stance, see https://github.com/python/steering-council/issues/142#issuecomment-1252172695
-rw-r--r--Doc/reference/expressions.rst14
1 files changed, 12 insertions, 2 deletions
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index 6bf21a7..edba1c8 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -1054,10 +1054,20 @@ used in the same call, so in practice this confusion does not often arise.
If the syntax ``**expression`` appears in the function call, ``expression`` must
evaluate to a :term:`mapping`, the contents of which are treated as
-additional keyword arguments. If a keyword is already present
-(as an explicit keyword argument, or from another unpacking),
+additional keyword arguments. If a parameter matching a key has already been
+given a value (by an explicit keyword argument, or from another unpacking),
a :exc:`TypeError` exception is raised.
+When ``**expression`` is used, each key in this mapping must be
+a string.
+Each value from the mapping is assigned to the first formal parameter
+eligible for keyword assignment whose name is equal to the key.
+A key need not be a Python identifier (e.g. ``"max-temp °F"`` is acceptable,
+although it will not match any formal parameter that could be declared).
+If there is no match to a formal parameter
+the key-value pair is collected by the ``**`` parameter, if there is one,
+or if there is not, a :exc:`TypeError` exception is raised.
+
Formal parameters using the syntax ``*identifier`` or ``**identifier`` cannot be
used as positional argument slots or as keyword argument names.