Python 3.8.0 (final) was released on the 14 October 2019. The Features for 3.8 are defined in PEP 569 and a detailed description of the changes can be found in What's New in Python 3.8.
Features | Status | |
PEP 570 | Positional-only arguments | |
PEP 572 | Assignment Expressions | Complete |
PEP 574 | Pickle protocol 5 with out-of-band data | |
PEP 578 | Runtime audit hooks | |
PEP 587 | Python Initialization Configuration | |
PEP 590 | Vectorcall: a fast calling protocol for CPython | |
Miscellaneous | ||
f-strings support = for self-documenting expressions and debugging | Complete |
Other Language Changes:
A continue statement was illegal in the finally clause due to a problem with the implementation. In Python 3.8 this restriction was lifted | Complete |
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:
asyncio | |
asyncio.run() has graduated from the provisional to stable API | Complete |
Running python -m asyncio launches a natively async REPL | |
The exception asyncio.CancelledError now inherits from BaseException rather than Exception and no longer inherits from concurrent.futures.CancelledError | Complete |
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. | |
gc | |
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) | |
math | |
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 | |
The function math.factorial() no longer accepts arguments that are not int-like | Complete |
sys | |
Add new sys.unraisablehook() function which can be overridden to control how "unraisable exceptions" are handled |