1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
|
.. _python_310:
Python 3.10
===========
Python 3.10.0 (final) was released on the 4 October 2021. The Features for 3.10 are
defined in `PEP 619 <https://www.python.org/dev/peps/pep-0619/#features-for-3-10>`_
and a detailed description of the changes can be found in
`What's New in Python 3.10 <https://docs.python.org/3/whatsnew/3.10.html>`_.
.. table::
:widths: 20 60 20
+--------------------------------------------------------+----------------------------------------------------+--------------+
| **New syntax features** | **Status** |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 634 <https://www.python.org/dev/peps/pep-0634/>`_ | Structural Pattern Matching: Specification | [#spm]_ |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 635 <https://www.python.org/dev/peps/pep-0635/>`_ | Structural Pattern Matching: Motivation and | [#spm]_ |
| | Rationale | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 636 <https://www.python.org/dev/peps/pep-0636/>`_ | Structural Pattern Matching: Tutorial | [#spm]_ |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `bpo-12782 | Parenthesized context managers are now officially | |
| <https://github.com/python/cpython/issues/56991>`_ | allowed | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| **New features in the standard library** |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 618 <https://www.python.org/dev/peps/pep-0618/>`_ | Add Optional Length-Checking To zip | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| **Interpreter improvements** |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 626 <https://www.python.org/dev/peps/pep-0626/>`_ | Precise line numbers for debugging and other tools | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| **New typing features** |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 604 <https://www.python.org/dev/peps/pep-0604/>`_ | Allow writing union types as X | Y | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 613 <https://www.python.org/dev/peps/pep-0613/>`_ | Explicit Type Aliases | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 612 <https://www.python.org/dev/peps/pep-0612/>`_ | Parameter Specification Variables | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| **Important deprecations, removals or restrictions** |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 644 <https://www.python.org/dev/peps/pep-0644/>`_ | Require OpenSSL 1.1.1 or newer | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 632 <https://www.python.org/dev/peps/pep-0632/>`_ | Deprecate distutils module. | Not relevant |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 623 <https://www.python.org/dev/peps/pep-0623/>`_ | Deprecate and prepare for the removal of the wstr | Not relevant |
| | member in PyUnicodeObject. | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 624 <https://www.python.org/dev/peps/pep-0624/>`_ | Remove Py_UNICODE encoder APIs | Not relevant |
+--------------------------------------------------------+----------------------------------------------------+--------------+
| `PEP 597 <https://www.python.org/dev/peps/pep-0597/>`_ | Add optional EncodingWarning | |
+--------------------------------------------------------+----------------------------------------------------+--------------+
Other Language Changes:
.. table::
:widths: 90 10
+-------------------------------------------------------------------------------------------------------------+---------------+
| The :class:`int` type has a new method :meth:`int.bit_count`, returning the | |
| number of ones in the binary expansion of a given integer, also known | |
| as the population count. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| The views returned by :meth:`dict.keys`, :meth:`dict.values` and | |
| :meth:`dict.items` now all have a ``mapping`` attribute that gives a | |
| :class:`types.MappingProxyType` object wrapping the original | |
| dictionary. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| :pep:`618`: The :func:`zip` function now has an optional ``strict`` flag, used | |
| to require that all the iterables have an equal length. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Builtin and extension functions that take integer arguments no longer accept | |
| :class:`~decimal.Decimal`\ s, :class:`~fractions.Fraction`\ s and other | |
| objects that can be converted to integers only with a loss (e.g. that have | |
| the :meth:`~object.__int__` method but do not have the | |
| :meth:`~object.__index__` method). | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| If :func:`object.__ipow__` returns :const:`NotImplemented`, the operator will | |
| correctly fall back to :func:`object.__pow__` and :func:`object.__rpow__` as expected. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Assignment expressions can now be used unparenthesized within set literals | |
| and set comprehensions, as well as in sequence indexes (but not slices). | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Functions have a new ``__builtins__`` attribute which is used to look for | |
| builtin symbols when a function is executed, instead of looking into | |
| ``__globals__['__builtins__']``. The attribute is initialized from | |
| ``__globals__["__builtins__"]`` if it exists, else from the current builtins. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Two new builtin functions -- :func:`aiter` and :func:`anext` have been added | |
| to provide asynchronous counterparts to :func:`iter` and :func:`next`, | |
| respectively. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Static methods (:func:`@staticmethod <staticmethod>`) and class methods | |
| (:func:`@classmethod <classmethod>`) now inherit the method attributes | |
| (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, | |
| ``__annotations__``) and have a new ``__wrapped__`` attribute. | |
| Moreover, static methods are now callable as regular functions. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Annotations for complex targets (everything beside ``simple name`` targets | |
| defined by :pep:`526`) no longer cause any runtime effects with ``from __future__ import annotations``. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Class and module objects now lazy-create empty annotations dicts on demand. | |
| The annotations dicts are stored in the object’s ``__dict__`` for | |
| backwards compatibility. This improves the best practices for working | |
| with ``__annotations__``. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Annotations consist of ``yield``, ``yield from``, ``await`` or named expressions | |
| are now forbidden under ``from __future__ import annotations`` due to their side | |
| effects. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Usage of unbound variables, ``super()`` and other expressions that might | |
| alter the processing of symbol table as annotations are now rendered | |
| effectless under ``from __future__ import annotations``. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| Hashes of NaN values of both :class:`float` type and | |
| :class:`decimal.Decimal` type now depend on object identity. Formerly, they | |
| always hashed to ``0`` even though NaN values are not equal to one another. | |
| This caused potentially quadratic runtime behavior due to excessive hash | |
| collisions when creating dictionaries and sets containing multiple NaNs. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting | |
| the :const:`__debug__` constant. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
| :exc:`SyntaxError` exceptions now have ``end_lineno`` and | |
| ``end_offset`` attributes. They will be ``None`` if not determined. | |
+-------------------------------------------------------------------------------------------------------------+---------------+
Changes to built-in modules:
.. table::
:widths: 90 10
+---------------------------------------------------------------------------------------------------------------+---------------+
| `asyncio <https://docs.python.org/3/whatsnew/3.10.html#asyncio>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` | |
| method. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `array <https://docs.python.org/3/whatsnew/3.10.html#array>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The :meth:`~array.array.index` method of :class:`array.array` now has | |
| optional *start* and *stop* parameters. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `gc <https://docs.python.org/3/whatsnew/3.10.html#gc>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and | |
| :func:`gc.get_referents`. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `hashlib <https://docs.python.org/3/whatsnew/3.10.html#hashlib>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The hashlib module requires OpenSSL 1.1.1 or newer. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The hashlib module has preliminary support for OpenSSL 3.0.0. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The pure-Python fallback of :func:`~hashlib.pbkdf2_hmac` is deprecated. In | |
| the future PBKDF2-HMAC will only be available when Python has been built with | |
| OpenSSL support. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `os <https://docs.python.org/3/whatsnew/3.10.html#os>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add :func:`os.cpu_count()` support for VxWorks RTOS. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add a new function :func:`os.eventfd` and related helpers to wrap the | |
| ``eventfd2`` syscall on Linux. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add :func:`os.splice()` that allows to move data between two file | |
| descriptors without copying between kernel address space and user | |
| address space, where one of the file descriptors must refer to a | |
| pipe. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` | |
| and :data:`~os.O_NOFOLLOW_ANY` for macOS. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `platform <https://docs.python.org/3/whatsnew/3.10.html#platform>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add :func:`platform.freedesktop_os_release()` to retrieve operation system | |
| identification from `freedesktop.org os-release | |
| <https://www.freedesktop.org/software/systemd/man/os-release.html>`_ standard file. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `socket <https://docs.python.org/3/whatsnew/3.10.html#socket>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The exception :exc:`socket.timeout` is now an alias of :exc:`TimeoutError`. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add option to create MPTCP sockets with ``IPPROTO_MPTCP``. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add ``IP_RECVTOS`` option to receive the type of service (ToS) or DSCP/ECN fields. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `ssl <https://docs.python.org/3/whatsnew/3.10.html#ssl>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The ssl module requires OpenSSL 1.1.1 or newer. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The ssl module has preliminary support for OpenSSL 3.0.0 and new option | |
| :data:`~ssl.OP_IGNORE_UNEXPECTED_EOF`. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Deprecated function and use of deprecated constants now result in | |
| a :exc:`DeprecationWarning`. :attr:`ssl.SSLContext.options` has | |
| :data:`~ssl.OP_NO_SSLv2` and :data:`~ssl.OP_NO_SSLv3` set by default and | |
| therefore cannot warn about setting the flag again. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The ssl module now has more secure default settings. Ciphers without forward | |
| secrecy or SHA-1 MAC are disabled by default. Security level 2 prohibits | |
| weak RSA, DH, and ECC keys with less than 112 bits of security. | |
| :class:`~ssl.SSLContext` defaults to minimum protocol version TLS 1.2. | |
| Settings are based on Hynek Schlawack's research. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The deprecated protocols SSL 3.0, TLS 1.0, and TLS 1.1 are no longer | |
| officially supported. Python does not block them actively. However | |
| OpenSSL build options, distro configurations, vendor patches, and cipher | |
| suites may prevent a successful handshake. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| The ssl module uses heap-types and multi-phase initialization. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| A new verify flag :data:`~ssl.VERIFY_X509_PARTIAL_CHAIN` has been added. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `sys <https://docs.python.org/3/whatsnew/3.10.html#sys>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add :data:`sys.orig_argv` attribute: the list of the original command line | |
| arguments passed to the Python executable. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| Add :data:`sys.stdlib_module_names`, containing the list of the standard library | |
| module names. | |
+---------------------------------------------------------------------------------------------------------------+---------------+
| `_thread <https://docs.python.org/3/whatsnew/3.10.html#_thread>`_ |
+---------------------------------------------------------------------------------------------------------------+---------------+
| :func:`_thread.interrupt_main` now takes an optional signal number to | |
| simulate (the default is still :data:`signal.SIGINT`). | |
+---------------------------------------------------------------------------------------------------------------+---------------+
.. rubric:: Notes
.. [#spm] The structural pattern matching feature is discussed in `issue #7847 <https://github.com/micropython/micropython/issues/7847>`_.
|