2021-10-13 08:02:37 +01:00
|
|
|
.. _python_38:
|
|
|
|
|
|
|
|
Python 3.8
|
|
|
|
==========
|
|
|
|
|
|
|
|
Python 3.8.0 (final) was released on the 14 October 2019. The Features for 3.8
|
|
|
|
are defined in `PEP 569 <https://www.python.org/dev/peps/pep-0569/#id9>`_ and
|
2022-08-18 16:15:50 +01:00
|
|
|
a detailed description of the changes can be found in `What's New in Python
|
2021-10-13 08:02:37 +01:00
|
|
|
3.8. <https://docs.python.org/3/whatsnew/3.8.html>`_
|
|
|
|
|
2022-08-18 16:15:50 +01:00
|
|
|
.. table::
|
|
|
|
:widths: 20 60 20
|
|
|
|
|
2021-10-13 08:02:37 +01:00
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| **Features** | **Status** |
|
2021-10-13 08:02:37 +01:00
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
|
|
|
| `PEP 570 <https://www.python.org/dev/peps/pep-0570/>`_ | Positional-only arguments | |
|
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| `PEP 572 <https://www.python.org/dev/peps/pep-0572/>`_ | Assignment Expressions | Complete |
|
2021-10-13 08:02:37 +01:00
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
|
|
|
| `PEP 574 <https://www.python.org/dev/peps/pep-0574/>`_ | Pickle protocol 5 with out-of-band data | |
|
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
|
|
|
| `PEP 578 <https://www.python.org/dev/peps/pep-0578/>`_ | Runtime audit hooks | |
|
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
|
|
|
| `PEP 587 <https://www.python.org/dev/peps/pep-0587/>`_ | Python Initialization Configuration | |
|
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
|
|
|
| `PEP 590 <https://www.python.org/dev/peps/pep-0590/>`_ | Vectorcall: a fast calling protocol for CPython | |
|
|
|
|
+--------------------------------------------------------+---------------------------------------------------+---------------+
|
|
|
|
| **Miscellaneous** |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+---------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| f-strings support = for self-documenting expressions and debugging | Complete |
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+---------------+
|
|
|
|
|
|
|
|
Other Language Changes:
|
|
|
|
|
2022-08-18 16:15:50 +01:00
|
|
|
.. table::
|
|
|
|
:widths: 90 10
|
|
|
|
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| A *continue* statement was illegal in the *finally* clause due to a problem with the implementation. In | Complete |
|
2021-10-13 08:02:37 +01:00
|
|
|
| Python 3.8 this restriction was lifted | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| The *bool*, *int* , and *fractions.Fraction* types now have an *as_integer_ratio()* method like that found | |
|
|
|
|
| in *float* and *decimal.Decimal* | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Constructors of *int*, *float* and *complex* will now use the *__index__()* special method, if available | |
|
|
|
|
| and the corresponding method *__int__()*, *__float__()* or *__complex__()* is not available | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Added support of *\N{name}* escapes in regular expressions | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Dict and dictviews are now iterable in reversed insertion order using *reversed()* | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| The syntax allowed for keyword names in function calls was further restricted. In particular, | |
|
|
|
|
| f((keyword)=arg) is no longer allowed | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Generalized iterable unpacking in yield and return statements no longer requires enclosing parentheses | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| When a comma is missed in code such as [(10, 20) (30, 40)], the compiler displays a SyntaxWarning with a | |
|
|
|
|
| helpful suggestion | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Arithmetic operations between subclasses of *datetime.date* or *datetime.datetime* and *datetime.timedelta*| |
|
|
|
|
| objects now return an instance of the subclass, rather than the base class | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| When the Python interpreter is interrupted by *Ctrl-C (SIGINT)* and the resulting *KeyboardInterrupt* | |
|
|
|
|
| exception is not caught, the Python process now exits via a SIGINT signal or with the correct exit code | |
|
|
|
|
| such that the calling process can detect that it died due to a *Ctrl-C* | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Some advanced styles of programming require updating the *types.CodeType* object for an existing function | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| For integers, the three-argument form of the pow() function now permits the exponent to be negative in the | |
|
|
|
|
| case where the base is relatively prime to the modulus | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Dict comprehensions have been synced-up with dict literals so that the key is computed first and the value | |
|
|
|
|
| second | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| The *object.__reduce__()* method can now return a tuple from two to six elements long | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
|
|
|
|
Changes to built-in modules:
|
|
|
|
|
2022-08-18 16:15:50 +01:00
|
|
|
.. table::
|
|
|
|
:widths: 90 10
|
|
|
|
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| `asyncio <https://docs.python.org/3/whatsnew/3.8.html#asyncio>`_ |
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| *asyncio.run()* has graduated from the provisional to stable API | Complete |
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Running *python -m asyncio* launches a natively async REPL | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| The exception *asyncio.CancelledError* now inherits from *BaseException* rather than *Exception* and no | Complete |
|
2021-10-13 08:02:37 +01:00
|
|
|
| longer inherits from *concurrent.futures.CancelledError* | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Added *asyncio.Task.get_coro()* for getting the wrapped coroutine within an *asyncio.Task* | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Asyncio tasks can now be named, either by passing the name keyword argument to *asyncio.create_task()* or | |
|
|
|
|
| the *create_task()* event loop method, or by calling the *set_name()* method on the task object | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Added support for Happy Eyeballs to *asyncio.loop.create_connection()*. To specify the behavior, two new | |
|
|
|
|
| parameters have been added: *happy_eyeballs_delay* and interleave. | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| `gc <https://docs.python.org/3/whatsnew/3.8.html#gc>`_ |
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| *get_objects()* can now receive an optional generation parameter indicating a generation to get objects | |
|
|
|
|
| from. (Note, though, that while *gc* is a built-in, *get_objects()* is not implemented for MicroPython) | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| `math <https://docs.python.org/3/whatsnew/3.8.html#math>`_ |
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Added new function *math.dist()* for computing Euclidean distance between two points | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Expanded the *math.hypot()* function to handle multiple dimensions | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Added new function, *math.prod()*, as analogous function to *sum()* that returns the product of a "start" | |
|
|
|
|
| value (default: 1) times an iterable of numbers | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Added two new combinatoric functions *math.perm()* and *math.comb()* | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Added a new function *math.isqrt()* for computing accurate integer square roots without conversion to | |
|
|
|
|
| floating point | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| The function *math.factorial()* no longer accepts arguments that are not int-like | Complete |
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
2022-08-18 16:15:50 +01:00
|
|
|
| `sys <https://docs.python.org/3/whatsnew/3.8.html#sys>`_ |
|
2021-10-13 08:02:37 +01:00
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|
|
|
|
| Add new *sys.unraisablehook()* function which can be overridden to control how "unraisable exceptions" | |
|
|
|
|
| are handled | |
|
|
|
|
+------------------------------------------------------------------------------------------------------------+-------------+
|