* Changed :meth:`Enum.__format__() <enum.Enum.__format__>` (the default for
:func:`format`, :meth:`str.format` and :term:`f-string`\s) to always produce
- the same result as :meth:`Enum.__str__()`: for enums inheriting from
+ the same result as :meth:`Enum.__str__() <enum.Enum.__str__>`: for enums inheriting from
:class:`~enum.ReprEnum` it will be the member's value; for all other enums
it will be the enum and member name (e.g. ``Color.RED``).
New opcodes
-----------
-* :opcode:`ASYNC_GEN_WRAP`, :opcode:`RETURN_GENERATOR` and :opcode:`SEND`,
+* :opcode:`!ASYNC_GEN_WRAP`, :opcode:`RETURN_GENERATOR` and :opcode:`SEND`,
used in generators and co-routines.
* :opcode:`COPY_FREE_VARS`,
* :opcode:`MAKE_CELL`, to create :ref:`cell-objects`.
-* :opcode:`CHECK_EG_MATCH` and :opcode:`PREP_RERAISE_STAR`,
+* :opcode:`CHECK_EG_MATCH` and :opcode:`!PREP_RERAISE_STAR`,
to handle the :ref:`new exception groups and except* <whatsnew311-pep654>`
added in :pep:`654`.
Replaced opcodes
----------------
-+------------------------------------+-----------------------------------+-----------------------------------------+
-| Replaced Opcode(s) | New Opcode(s) | Notes |
-+====================================+===================================+=========================================+
-| | :opcode:`!BINARY_*` | :opcode:`BINARY_OP` | Replaced all numeric binary/in-place |
-| | :opcode:`!INPLACE_*` | | opcodes with a single opcode |
-+------------------------------------+-----------------------------------+-----------------------------------------+
-| | :opcode:`!CALL_FUNCTION` | | :opcode:`CALL` | Decouples argument shifting for methods |
-| | :opcode:`!CALL_FUNCTION_KW` | | :opcode:`KW_NAMES` | from handling of keyword arguments; |
-| | :opcode:`!CALL_METHOD` | | :opcode:`PRECALL` | allows better specialization of calls |
-| | | :opcode:`PUSH_NULL` | |
-+------------------------------------+-----------------------------------+-----------------------------------------+
-| | :opcode:`!DUP_TOP` | | :opcode:`COPY` | Stack manipulation instructions |
-| | :opcode:`!DUP_TOP_TWO` | | :opcode:`SWAP` | |
-| | :opcode:`!ROT_TWO` | | |
-| | :opcode:`!ROT_THREE` | | |
-| | :opcode:`!ROT_FOUR` | | |
-| | :opcode:`!ROT_N` | | |
-+------------------------------------+-----------------------------------+-----------------------------------------+
-| | :opcode:`!JUMP_IF_NOT_EXC_MATCH` | | :opcode:`CHECK_EXC_MATCH` | Now performs check but doesn't jump |
-+------------------------------------+-----------------------------------+-----------------------------------------+
-| | :opcode:`!JUMP_ABSOLUTE` | | :opcode:`JUMP_BACKWARD` | See [#bytecode-jump]_; |
-| | :opcode:`!POP_JUMP_IF_FALSE` | | :opcode:`POP_JUMP_BACKWARD_IF_* | ``TRUE``, ``FALSE``, |
-| | :opcode:`!POP_JUMP_IF_TRUE` | <POP_JUMP_BACKWARD_IF_TRUE>` | ``NONE`` and ``NOT_NONE`` variants |
-| | | :opcode:`POP_JUMP_FORWARD_IF_* | for each direction |
-| | <POP_JUMP_FORWARD_IF_TRUE>` | |
-+------------------------------------+-----------------------------------+-----------------------------------------+
-| | :opcode:`!SETUP_WITH` | :opcode:`BEFORE_WITH` | :keyword:`with` block setup |
-| | :opcode:`!SETUP_ASYNC_WITH` | | |
-+------------------------------------+-----------------------------------+-----------------------------------------+
++------------------------------------+------------------------------------+-----------------------------------------+
+| Replaced Opcode(s) | New Opcode(s) | Notes |
++====================================+====================================+=========================================+
+| | :opcode:`!BINARY_*` | :opcode:`BINARY_OP` | Replaced all numeric binary/in-place |
+| | :opcode:`!INPLACE_*` | | opcodes with a single opcode |
++------------------------------------+------------------------------------+-----------------------------------------+
+| | :opcode:`!CALL_FUNCTION` | | :opcode:`CALL` | Decouples argument shifting for methods |
+| | :opcode:`!CALL_FUNCTION_KW` | | :opcode:`!KW_NAMES` | from handling of keyword arguments; |
+| | :opcode:`!CALL_METHOD` | | :opcode:`!PRECALL` | allows better specialization of calls |
+| | | :opcode:`PUSH_NULL` | |
++------------------------------------+------------------------------------+-----------------------------------------+
+| | :opcode:`!DUP_TOP` | | :opcode:`COPY` | Stack manipulation instructions |
+| | :opcode:`!DUP_TOP_TWO` | | :opcode:`SWAP` | |
+| | :opcode:`!ROT_TWO` | | |
+| | :opcode:`!ROT_THREE` | | |
+| | :opcode:`!ROT_FOUR` | | |
+| | :opcode:`!ROT_N` | | |
++------------------------------------+------------------------------------+-----------------------------------------+
+| | :opcode:`!JUMP_IF_NOT_EXC_MATCH` | | :opcode:`CHECK_EXC_MATCH` | Now performs check but doesn't jump |
++------------------------------------+------------------------------------+-----------------------------------------+
+| | :opcode:`!JUMP_ABSOLUTE` | | :opcode:`JUMP_BACKWARD` | See [#bytecode-jump]_; |
+| | :opcode:`!POP_JUMP_IF_FALSE` | | :opcode:`!POP_JUMP_BACKWARD_IF_*`| ``TRUE``, ``FALSE``, |
+| | :opcode:`!POP_JUMP_IF_TRUE` | | :opcode:`!POP_JUMP_FORWARD_IF_*` | ``NONE`` and ``NOT_NONE`` variants |
+| | | for each direction |
+| | | |
++------------------------------------+------------------------------------+-----------------------------------------+
+| | :opcode:`!SETUP_WITH` | :opcode:`BEFORE_WITH` | :keyword:`with` block setup |
+| | :opcode:`!SETUP_ASYNC_WITH` | | |
++------------------------------------+------------------------------------+-----------------------------------------+
.. [#bytecode-jump] All jump opcodes are now relative, including the
- existing :opcode:`JUMP_IF_TRUE_OR_POP` and :opcode:`JUMP_IF_FALSE_OR_POP`.
+ existing :opcode:`!JUMP_IF_TRUE_OR_POP` and :opcode:`!JUMP_IF_FALSE_OR_POP`.
The argument is now an offset from the current instruction
rather than an absolute location.
and will be removed in a future Python version,
due to not supporting resources located within package subdirectories:
- * :func:`importlib.resources.contents`
- * :func:`importlib.resources.is_resource`
- * :func:`importlib.resources.open_binary`
- * :func:`importlib.resources.open_text`
- * :func:`importlib.resources.read_binary`
- * :func:`importlib.resources.read_text`
- * :func:`importlib.resources.path`
+ * :func:`!importlib.resources.contents`
+ * :func:`!importlib.resources.is_resource`
+ * :func:`!importlib.resources.open_binary`
+ * :func:`!importlib.resources.open_text`
+ * :func:`!importlib.resources.read_binary`
+ * :func:`!importlib.resources.read_text`
+ * :func:`!importlib.resources.path`
* The :func:`locale.getdefaultlocale` function is deprecated and will be
removed in Python 3.15. Use :func:`locale.setlocale`,
:func:`locale.getlocale` functions instead.
(Contributed by Victor Stinner in :gh:`90817`.)
-* The :func:`locale.resetlocale` function is deprecated and will be
+* The :func:`!locale.resetlocale` function is deprecated and will be
removed in Python 3.13. Use ``locale.setlocale(locale.LC_ALL, "")`` instead.
(Contributed by Victor Stinner in :gh:`90817`.)
(Contributed by Victor Stinner in :issue:`45085`.)
-* Removed the :mod:`distutils` ``bdist_msi`` command deprecated in Python 3.9.
+* Removed the :mod:`!distutils` ``bdist_msi`` command deprecated in Python 3.9.
Use ``bdist_wheel`` (wheel packages) instead.
(Contributed by Hugo van Kemenade in :issue:`45124`.)
as its second parameter, instead of ``PyFrameObject*``.
See :pep:`523` for more details of how to use this function pointer type.
-* :c:func:`PyCode_New` and :c:func:`PyCode_NewWithPosOnlyArgs` now take
+* :c:func:`!PyCode_New` and :c:func:`!PyCode_NewWithPosOnlyArgs` now take
an additional ``exception_table`` argument.
Using these functions should be avoided, if at all possible.
To get a custom code object: create a code object using the compiler,
been included directly, consider including ``Python.h`` instead.
(Contributed by Victor Stinner in :issue:`35134`.)
-* The :c:func:`PyUnicode_CHECK_INTERNED` macro has been excluded from the
+* The :c:func:`!PyUnicode_CHECK_INTERNED` macro has been excluded from the
limited C API. It was never usable there, because it used internal structures
which are not available in the limited C API.
(Contributed by Victor Stinner in :issue:`46007`.)
Debuggers that accessed the :attr:`~frame.f_locals` directly *must* call
:c:func:`PyFrame_GetLocals` instead. They no longer need to call
- :c:func:`PyFrame_FastToLocalsWithError` or :c:func:`PyFrame_LocalsToFast`,
+ :c:func:`!PyFrame_FastToLocalsWithError` or :c:func:`!PyFrame_LocalsToFast`,
in fact they should not call those functions. The necessary updating of the
frame is now managed by the virtual machine.
* :c:func:`!PyUnicode_GET_DATA_SIZE`
* :c:func:`!PyUnicode_GET_SIZE`
* :c:func:`!PyUnicode_GetSize`
-* :c:func:`PyUnicode_IS_COMPACT`
-* :c:func:`PyUnicode_IS_READY`
+* :c:func:`!PyUnicode_IS_COMPACT`
+* :c:func:`!PyUnicode_IS_READY`
* :c:func:`PyUnicode_READY`
* :c:func:`!PyUnicode_WSTR_LENGTH`
* :c:func:`!_PyUnicode_AsUnicode`
(Contributed by Victor Stinner in :issue:`45474`.)
* Exclude :c:func:`PyWeakref_GET_OBJECT` from the limited C API. It never
- worked since the :c:type:`PyWeakReference` structure is opaque in the
+ worked since the :c:type:`!PyWeakReference` structure is opaque in the
limited C API.
(Contributed by Victor Stinner in :issue:`35134`.)