Back to Micropython

Python 3.10

docs/differences/python_310.rst

1.28.027.1 KB
Original Source

.. _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>_.