bpo-35224: Reverse evaluation order of key: value in dict comprehensions (GH-14139)
… as proposed in PEP 572; key is now evaluated before value.
https://bugs.python.org/issue35224
(cherry picked from commit c8a35417db8853a253517a3e5190e174075c6384)
Co-authored-by: Jörn Heissler <joernheissler@users.noreply.github.com>
diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst
index 5b79be6..39a3e13 100644
--- a/Doc/library/dis.rst
+++ b/Doc/library/dis.rst
@@ -645,10 +645,12 @@
.. opcode:: MAP_ADD (i)
- Calls ``dict.setitem(TOS1[-i], TOS, TOS1)``. Used to implement dict
+ Calls ``dict.__setitem__(TOS1[-i], TOS1, TOS)``. Used to implement dict
comprehensions.
.. versionadded:: 3.1
+ .. versionchanged:: 3.8
+ Map value is TOS and map key is TOS1. Before, those were reversed.
For all of the :opcode:`SET_ADD`, :opcode:`LIST_APPEND` and :opcode:`MAP_ADD`
instructions, while the added value or key/value pair is popped off, the
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index 8b71106..432327a 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -337,6 +337,12 @@
datum (textually rightmost in the display) stored for a given key value
prevails.
+.. versionchanged:: 3.8
+ Prior to Python 3.8, in dict comprehensions, the evaluation order of key
+ and value was not well-defined. In CPython, the value was evaluated before
+ the key. Starting with 3.8, the key is evaluated before the value, as
+ proposed by :pep:`572`.
+
.. _genexpr: