blob: 82da10cc3be86e4a5e17ba90b596dd0c45002c56 [file] [log] [blame]
Ned Deily07a18922018-01-31 18:12:38 -05001****************************
2 What's New In Python 3.8
3****************************
4
Ned Deily07a18922018-01-31 18:12:38 -05005.. Rules for maintenance:
6
7 * Anyone can add text to this document. Do not spend very much time
8 on the wording of your changes, because your text will probably
9 get rewritten to some degree.
10
11 * The maintainer will go through Misc/NEWS periodically and add
12 changes; it's therefore more important to add your changes to
13 Misc/NEWS than to this file.
14
15 * This is not a complete list of every single change; completeness
16 is the purpose of Misc/NEWS. Some changes I consider too small
17 or esoteric to include. If such a change is added to the text,
18 I'll just remove it. (This is another reason you shouldn't spend
19 too much time on writing your addition.)
20
21 * If you want to draw your new text to the attention of the
22 maintainer, add 'XXX' to the beginning of the paragraph or
23 section.
24
25 * It's OK to just add a fragmentary note about a change. For
26 example: "XXX Describe the transmogrify() function added to the
27 socket module." The maintainer will research the change and
28 write the necessary text.
29
30 * You can comment out your additions if you like, but it's not
31 necessary (especially when a final release is some months away).
32
33 * Credit the author of a patch or bugfix. Just the name is
34 sufficient; the e-mail address isn't necessary.
35
36 * It's helpful to add the bug/patch number as a comment:
37
38 XXX Describe the transmogrify() function added to the socket
39 module.
40 (Contributed by P.Y. Developer in :issue:`12345`.)
41
42 This saves the maintainer the effort of going through the Mercurial log
43 when researching a change.
44
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070045:Editor: Raymond Hettinger
Ned Deily07a18922018-01-31 18:12:38 -050046
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070047This article explains the new features in Python 3.8, compared to 3.7.
Ned Deily45ab51c2018-02-28 13:58:38 -050048For full details, see the :ref:`changelog <changelog>`.
Ned Deily07a18922018-01-31 18:12:38 -050049
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070050Prerelease users should be aware that this document is currently in
51draft form. It will be updated as Python 3.8 moves towards release, so
52it's worth checking back even after reading earlier versions. Some
53notable items not yet covered are:
Ned Deily07a18922018-01-31 18:12:38 -050054
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070055* :pep:`578` - Runtime audit hooks for potentially sensitive operations
56* ``python -m asyncio`` runs a natively async REPL
Ned Deily07a18922018-01-31 18:12:38 -050057
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070058.. testsetup::
Nick Coghlanb9438ce2019-06-09 19:07:42 +100059
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070060 from datetime import date
61 from math import cos, radians
62 import re
63 import math
Nick Coghlanb9438ce2019-06-09 19:07:42 +100064
Ned Deily07a18922018-01-31 18:12:38 -050065
66Summary -- Release highlights
67=============================
68
69.. This section singles out the most important changes in Python 3.8.
70 Brevity is key.
71
72
73.. PEP-sized items next.
74
75
76
77New Features
78============
79
Guido van Rossum09d434c2019-04-24 11:30:17 -070080Assignment expressions
81----------------------
82
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070083There is new syntax ``:=`` that assigns values to variables as part of a larger
84expression. It is affectionately known as "walrus operator" due to
85its resemblance to `the eyes and tusks of a walrus
86<https://en.wikipedia.org/wiki/Walrus#/media/File:Pacific_Walrus_-_Bull_(8247646168).jpg>`_.
87
88In this example, the assignment expression helps avoid calling
89:func:`len` twice::
Guido van Rossum09d434c2019-04-24 11:30:17 -070090
91 if (n := len(a)) > 10:
92 print(f"List is too long ({n} elements, expected <= 10)")
93
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -070094A similar benefit arises during regular expression matching where
95match objects are needed twice, once to test whether a match
96occurred and another to extract a subgroup::
97
98 discount = 0.0
99 if (mo := re.search(r'(\d+)% discount', advertisement)):
100 discount = float(mo.group(1)) / 100.0
101
102The operator is also useful with while-loops that compute
103a value to test loop termination and then need that same
104value again in the body of the loop::
105
106 # Loop over fixed length blocks
107 while (block := f.read(256)) != '':
108 process(block)
109
110Another motivating use case arises in list comprehensions where
111a value computed in a filtering condition is also needed in
112the expression body::
113
114 [clean_name.title() for name in names
115 if (clean_name := normalize('NFC', name)) in allowed_names]
116
117Try to limit use of the walrus operator to clean cases that reduce
118complexity and improve readability.
119
Guido van Rossum09d434c2019-04-24 11:30:17 -0700120See :pep:`572` for a full description.
121
122(Contributed by Emily Morehouse in :issue:`35224`.)
123
124.. TODO: Emily will sprint on docs at PyCon US 2019.
125
126
Guido van Rossum843bf422019-04-29 05:49:30 -0700127Positional-only parameters
128--------------------------
129
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700130There is a new function parameter syntax ``/`` to indicate that some
131function parameters must be specified positionally and cannot be used as
132keyword arguments. This is the same notation shown by ``help()`` for C
133functions annotated with Larry Hastings' `Argument Clinic
134<https://docs.python.org/3/howto/clinic.html>`_ tool.
135
136In the following example, parameters *a* and *b* are positional-only,
137while *c* or *d* can be positional or keyword, and *e* or *f* are
138required to be keywords::
139
140 def f(a, b, /, c, d, *, e, f):
141 print(a, b, c, d, e, f)
142
143The following is a valid call::
144
145 f(10, 20, 30, d=40, e=50, f=60)
146
147However, these are invalid calls::
148
149 f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argument
150 f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument
151
152One use case for this notation is that it allows pure Python functions
153to fully emulate behaviors of existing C coded functions. For example,
154the built-in :func:`pow` function does not accept keyword arguments::
Guido van Rossum843bf422019-04-29 05:49:30 -0700155
156 def pow(x, y, z=None, /):
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700157 "Emulate the built in pow() function"
158 r = x ** y
159 return r if z is None else r%z
Guido van Rossum843bf422019-04-29 05:49:30 -0700160
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700161Another use case is to preclude keyword arguments when the parameter
162name is not helpful. For example, the builtin :func:`len` function has
163the signature ``len(obj, /)``. This precludes awkward calls such as::
164
165 len(obj='hello') # The "obj" keyword argument impairs readability
166
167A further benefit of marking a parameter as positional-only is that it
168allows the parameter name to be changed in the future without risk of
169breaking client code. For example, in the :mod:`statistics` module, the
170parameter name *dist* may be changed in the future. This was made
171possible with the following function specification::
172
173 def quantiles(dist, /, *, n=4, method='exclusive')
174 ...
175
176Since the parameters to the left of ``/`` are not exposed as possible
177keywords, the parameters names remain available for use in ``**kwargs``::
178
179 >>> def f(a, b, /, **kwargs):
180 ... print(a, b, kwargs)
181 ...
182 >>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
183 10 20 {'a': 1, 'b': 2, 'c': 3}
184
185This greatly simplifies the implementation of functions and methods
186that need to accept arbitrary keyword arguments. For example, here
187is an except from code in the :mod:`collections` module::
188
189 class Counter(dict):
190
191 def __init__(self, iterable=None, /, **kwds):
192 # Note "iterable" is a possible keyword argument
Guido van Rossum843bf422019-04-29 05:49:30 -0700193
194See :pep:`570` for a full description.
195
196(Contributed by Pablo Galindo in :issue:`36540`.)
197
198.. TODO: Pablo will sprint on docs at PyCon US 2019.
199
200
Nick Coghlan16eb3bc2018-06-20 21:25:01 +1000201Parallel filesystem cache for compiled bytecode files
202-----------------------------------------------------
203
204The new :envvar:`PYTHONPYCACHEPREFIX` setting (also available as
205:option:`-X` ``pycache_prefix``) configures the implicit bytecode
206cache to use a separate parallel filesystem tree, rather than
207the default ``__pycache__`` subdirectories within each source
208directory.
209
210The location of the cache is reported in :data:`sys.pycache_prefix`
211(:const:`None` indicates the default location in ``__pycache__``
212subdirectories).
213
214(Contributed by Carl Meyer in :issue:`33499`.)
Ned Deily07a18922018-01-31 18:12:38 -0500215
Victor Stinner40460692019-04-26 17:56:44 +0200216Debug build uses the same ABI as release build
217-----------------------------------------------
218
Paul Ganssle5c403b22019-04-27 14:14:35 -0400219Python now uses the same ABI whether it built in release or debug mode. On
220Unix, when Python is built in debug mode, it is now possible to load C
221extensions built in release mode and C extensions built using the stable ABI.
Victor Stinner40460692019-04-26 17:56:44 +0200222
Paul Ganssle5c403b22019-04-27 14:14:35 -0400223Release builds and debug builds are now ABI compatible: defining the
224``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro, which
225introduces the only ABI incompatibility. The ``Py_TRACE_REFS`` macro, which
226adds the :func:`sys.getobjects` function and the :envvar:`PYTHONDUMPREFS`
227environment variable, can be set using the new ``./configure --with-trace-refs``
228build option.
Victor Stinner40460692019-04-26 17:56:44 +0200229(Contributed by Victor Stinner in :issue:`36465`.)
230
E. M. Brayc994c8f2019-05-24 17:33:47 +0200231On Unix, C extensions are no longer linked to libpython except on Android
232and Cygwin.
Victor Stinner4ebcd7e2019-05-11 04:10:03 +0200233It is now possible
Paul Ganssle5c403b22019-04-27 14:14:35 -0400234for a statically linked Python to load a C extension built using a shared
235library Python.
Victor Stinner40460692019-04-26 17:56:44 +0200236(Contributed by Victor Stinner in :issue:`21536`.)
237
238On Unix, when Python is built in debug mode, import now also looks for C
239extensions compiled in release mode and for C extensions compiled with the
240stable ABI.
241(Contributed by Victor Stinner in :issue:`36722`.)
242
Victor Stinner0a8e5722019-05-23 03:30:23 +0200243To embed Python into an application, a new ``--embed`` option must be passed to
244``python3-config --libs --embed`` to get ``-lpython3.8`` (link the application
245to libpython). To support both 3.8 and older, try ``python3-config --libs
246--embed`` first and fallback to ``python3-config --libs`` (without ``--embed``)
247if the previous command fails.
248
249Add a pkg-config ``python-3.8-embed`` module to embed Python into an
250application: ``pkg-config python-3.8-embed --libs`` includes ``-lpython3.8``.
251To support both 3.8 and older, try ``pkg-config python-X.Y-embed --libs`` first
252and fallback to ``pkg-config python-X.Y --libs`` (without ``--embed``) if the
253previous command fails (replace ``X.Y`` with the Python version).
254
255On the other hand, ``pkg-config python3.8 --libs`` no longer contains
256``-lpython3.8``. C extensions must not be linked to libpython (except on
E. M. Brayc994c8f2019-05-24 17:33:47 +0200257Android and Cygwin, whose cases are handled by the script);
258this change is backward incompatible on purpose.
Victor Stinner0a8e5722019-05-23 03:30:23 +0200259(Contributed by Victor Stinner in :issue:`36721`.)
260
Eric V. Smith9a4135e2019-05-08 16:28:48 -0400261
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700262f-strings support ``=`` for self-documenting expressions and debugging
263----------------------------------------------------------------------
Eric V. Smith9a4135e2019-05-08 16:28:48 -0400264
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700265Added an ``=`` specifier to :term:`f-string`\s. An f-string such as
266``f'{expr=}'`` will expand to the text of the expression, an equal sign,
267then the representation of the evaluated expression. For example:
Eric V. Smith9a4135e2019-05-08 16:28:48 -0400268
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700269 >>> user = 'eric_idle'
270 >>> member_since = date(1975, 7, 31)
271 >>> f'{user=} {member_since=}'
272 "user='eric_idle' member_since=datetime.date(1975, 7, 31)"
273
274The usual :ref:`f-string format specifiers <f-strings>` allow more
275control over how the result of the expression is displayed::
276
277 >>> delta = date.today() - member_since
278 >>> f'{user=!s} {delta.days=:,d}'
279 'user=eric_idle delta.days=16,075'
280
281The ``=`` specifier will display the whole expression so that
282calculations can be shown::
283
284 >>> print(f'{theta=} {cos(radians(theta))=:.3f}')
285 theta=30 cos(radians(theta))=0.866
Eric V. Smith9a4135e2019-05-08 16:28:48 -0400286
287(Contributed by Eric V. Smith and Larry Hastings in :issue:`36817`.)
288
Victor Stinner331a6a52019-05-27 16:39:22 +0200289PEP 587: Python Initialization Configuration
290--------------------------------------------
291
292The :pep:`587` adds a new C API to configure the Python Initialization
293providing finer control on the whole configuration and better error reporting.
294
295New structures:
296
297* :c:type:`PyConfig`
298* :c:type:`PyPreConfig`
299* :c:type:`PyStatus`
300* :c:type:`PyWideStringList`
301
302New functions:
303
304* :c:func:`PyConfig_Clear`
305* :c:func:`PyConfig_InitIsolatedConfig`
306* :c:func:`PyConfig_InitPythonConfig`
307* :c:func:`PyConfig_Read`
308* :c:func:`PyConfig_SetArgv`
309* :c:func:`PyConfig_SetBytesArgv`
310* :c:func:`PyConfig_SetBytesString`
311* :c:func:`PyConfig_SetString`
312* :c:func:`PyPreConfig_InitIsolatedConfig`
313* :c:func:`PyPreConfig_InitPythonConfig`
314* :c:func:`PyStatus_Error`
315* :c:func:`PyStatus_Exception`
316* :c:func:`PyStatus_Exit`
317* :c:func:`PyStatus_IsError`
318* :c:func:`PyStatus_IsExit`
319* :c:func:`PyStatus_NoMemory`
320* :c:func:`PyStatus_Ok`
321* :c:func:`PyWideStringList_Append`
322* :c:func:`PyWideStringList_Insert`
323* :c:func:`Py_BytesMain`
324* :c:func:`Py_ExitStatusException`
325* :c:func:`Py_InitializeFromConfig`
326* :c:func:`Py_PreInitialize`
327* :c:func:`Py_PreInitializeFromArgs`
328* :c:func:`Py_PreInitializeFromBytesArgs`
329* :c:func:`Py_RunMain`
330
331This PEP also adds ``_PyRuntimeState.preconfig`` (:c:type:`PyPreConfig` type)
332and ``PyInterpreterState.config`` (:c:type:`PyConfig` type) fields to these
333internal structures. ``PyInterpreterState.config`` becomes the new
334reference configuration, replacing global configuration variables and
335other private variables.
336
337See :ref:`Python Initialization Configuration <init-config>` for the
338documentation.
339
340See :pep:`587` for a full description.
341
342(Contributed by Victor Stinner in :issue:`36763`.)
343
Ned Deily07a18922018-01-31 18:12:38 -0500344
Jeroen Demeyer9e3e06e2019-06-03 01:43:13 +0200345Vectorcall: a fast calling protocol for CPython
346-----------------------------------------------
347
348The "vectorcall" protocol is added to the Python/C API.
349It is meant to formalize existing optimizations which were already done
350for various classes.
351Any extension type implementing a callable can use this protocol.
352
353This is currently provisional,
354the aim is to make it fully public in Python 3.9.
355
356See :pep:`590` for a full description.
357
358(Contributed by Jeroen Demeyer and Mark Shannon in :issue:`36974`.)
359
360
Antoine Pitrouc879ff22019-06-09 14:47:15 +0200361Pickle protocol 5 with out-of-band data buffers
362-----------------------------------------------
363
364When :mod:`pickle` is used to transfer large data between Python processes
365in order to take advantage of multi-core or multi-machine processing,
366it is important to optimize the transfer by reducing memory copies, and
367possibly by applying custom techniques such as data-dependent compression.
368
369The :mod:`pickle` protocol 5 introduces support for out-of-band buffers
370where :pep:`3118`-compatible data can be transmitted separately from the
371main pickle stream, at the discretion of the communication layer.
372
373See :pep:`574` for a full description.
374
375(Contributed by Antoine Pitrou in :issue:`36785`.)
376
377
Ned Deily07a18922018-01-31 18:12:38 -0500378Other Language Changes
379======================
380
Serhiy Storchakafe2bbb12018-03-18 09:56:52 +0200381* A :keyword:`continue` statement was illegal in the :keyword:`finally` clause
382 due to a problem with the implementation. In Python 3.8 this restriction
383 was lifted.
384 (Contributed by Serhiy Storchaka in :issue:`32489`.)
385
Serhiy Storchakab2e20252018-10-20 00:46:31 +0300386* The :class:`int` type now has a new :meth:`~int.as_integer_ratio` method
387 compatible with the existing :meth:`float.as_integer_ratio` method.
Lisa Roach5ac70432018-09-13 23:56:23 -0700388 (Contributed by Lisa Roach in :issue:`33073`.)
389
Serhiy Storchakabdbad712019-06-02 00:05:48 +0300390* Constructors of :class:`int`, :class:`float` and :class:`complex` will now
391 use the :meth:`~object.__index__` special method, if available and the
392 corresponding method :meth:`~object.__int__`, :meth:`~object.__float__`
393 or :meth:`~object.__complex__` is not available.
394 (Contributed by Serhiy Storchaka in :issue:`20092`.)
395
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700396* Added support of ``\N{name}`` escapes in :mod:`regular expressions <re>`::
397
398 >>> notice = 'Copyright © 2019'
399 >>> copyright_year_pattern = re.compile(r'\N{copyright sign}\s*(\d{4})')
400 >>> int(copyright_year_pattern.search(notice).group(1))
401 2019
402
Serhiy Storchakaa445feb2018-02-10 00:08:17 +0200403 (Contributed by Jonathan Eunice and Serhiy Storchaka in :issue:`30688`.)
Ned Deily07a18922018-01-31 18:12:38 -0500404
Rémi Lapeyre6531bf62018-11-06 01:38:54 +0100405* Dict and dictviews are now iterable in reversed insertion order using
406 :func:`reversed`. (Contributed by Rémi Lapeyre in :issue:`33462`.)
407
Benjamin Petersonc9a71dd2018-09-12 17:14:39 -0700408* The syntax allowed for keyword names in function calls was further
409 restricted. In particular, ``f((keyword)=arg)`` is no longer allowed. It was
410 never intended to permit more than a bare name on the left-hand side of a
411 keyword argument assignment term. See :issue:`34641`.
Ned Deily07a18922018-01-31 18:12:38 -0500412
jChapman8fabae32018-09-22 21:13:10 -0400413* Iterable unpacking is now allowed without parentheses in :keyword:`yield`
414 and :keyword:`return` statements.
415 (Contributed by David Cuthbert and Jordan Chapman in :issue:`32117`.)
416
Serhiy Storchaka62e44812019-02-16 08:12:19 +0200417* The compiler now produces a :exc:`SyntaxWarning` in some cases when a comma
418 is missed before tuple or list. For example::
419
420 data = [
421 (1, 2, 3) # oops, missing comma!
422 (4, 5, 6)
423 ]
424
425 (Contributed by Serhiy Storchaka in :issue:`15248`.)
426
Paul Ganssled9503c32019-02-08 11:02:00 -0500427* Arithmetic operations between subclasses of :class:`datetime.date` or
428 :class:`datetime.datetime` and :class:`datetime.timedelta` objects now return
429 an instance of the subclass, rather than the base class. This also affects
430 the return type of operations whose implementation (directly or indirectly)
431 uses :class:`datetime.timedelta` arithmetic, such as
432 :meth:`datetime.datetime.astimezone`.
433 (Contributed by Paul Ganssle in :issue:`32417`.)
434
Gregory P. Smith06babb22019-02-23 10:43:49 -0800435* When the Python interpreter is interrupted by Ctrl-C (SIGINT) and the
436 resulting :exc:`KeyboardInterrupt` exception is not caught, the Python process
437 now exits via a SIGINT signal or with the correct exit code such that the
438 calling process can detect that it died due to a Ctrl-C. Shells on POSIX
439 and Windows use this to properly terminate scripts in interactive sessions.
440 (Contributed by Google via Gregory P. Smith in :issue:`1054041`.)
441
Victor Stinnera9f05d62019-05-24 23:57:23 +0200442* Added new ``replace()`` method to the code type (:class:`types.CodeType`).
443 (Contributed by Victor Stinner in :issue:`37032`.)
444
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700445* For integers, the three-argument form of the :func:`pow` function now
446 permits the exponent to be negative in the case where the base is
447 relatively prime to the modulus. It then computes a modular inverse to
448 the base when the exponent is ``-1``, and a suitable power of that
449 inverse for other negative exponents. For example, to compute the
450 `modular multiplicative inverse
451 <https://en.wikipedia.org/wiki/Modular_multiplicative_inverse>`_ of 38
452 modulo 137, write::
453
454 >>> pow(38, -1, 137)
455 119
456 >>> 119 * 38 % 137
457 1
458
459 Modular inverses arise in the solution of `linear Diophantine
460 equations <https://en.wikipedia.org/wiki/Diophantine_equation>`_.
461 For example, to find integer solutions for ``4258𝑥 + 147𝑦 = 369``,
462 first rewrite as ``4258𝑥 ≡ 369 (mod 147)`` then solve:
463
464 >>> x = 369 * pow(4258, -1, 147) % 147
465 >>> y = (4258 * x - 369) // -147
466 >>> 4258 * x + 147 * y
467 369
468
Mark Dickinsonc5299672019-06-02 10:24:06 +0100469 (Contributed by Mark Dickinson in :issue:`36027`.)
470
Pablo Galindob51b7132019-06-25 02:41:58 +0100471* When dictionary comprehensions are evaluated, the key is now evaluated before
472 the value, as proposed by :pep:`572`.
473
Serhiy Storchaka65439122018-10-19 17:42:06 +0300474
Ned Deily07a18922018-01-31 18:12:38 -0500475New Modules
476===========
477
Barry Warsaw4867eaa2019-06-05 19:40:19 -0700478* The new :mod:`importlib.metadata` module provides (provisional) support for
479 reading metadata from third-party packages. For example, you can extract an
480 installed package's version number, list of entry points, and more. See
481 :issue:`34632` for additional details.
Ned Deily07a18922018-01-31 18:12:38 -0500482
483
484Improved Modules
485================
486
Raymond Hettinger0bb4bdf2019-01-31 00:59:50 -0800487
Guido van Rossum9b33ce42019-06-11 13:42:35 -0700488ast
489---
490
491AST nodes now have ``end_lineno`` and ``end_col_offset`` attributes,
492which give the precise location of the end of the node. (This only
493applies to nodes that have ``lineno`` and ``col_offset`` attributes.)
494
495The :func:`ast.parse` function has some new flags:
496
497* ``type_comments=True`` causes it to return the text of :pep:`484` and
498 :pep:`526` type comments associated with certain AST nodes;
499
500* ``mode='func_type'`` can be used to parse :pep:`484` "signature type
501 comments" (returned for function definition AST nodes);
502
Guido van Rossum10b55c12019-06-11 17:23:12 -0700503* ``feature_version=(3, N)`` allows specifying an earlier Python 3
504 version. (For example, ``feature_version=(3, 4)`` will treat
505 ``async`` and ``await`` as non-reserved words.)
Guido van Rossum9b33ce42019-06-11 13:42:35 -0700506
507New function :func:`ast.get_source_segment` returns the source code
508for a specific AST node.
509
510
Victor Stinner6ea29c52018-09-25 08:27:08 -0700511asyncio
512-------
513
514On Windows, the default event loop is now :class:`~asyncio.ProactorEventLoop`.
Victor Stinner01ae8972019-06-03 16:28:01 +0200515(Contributed by Victor Stinner in :issue:`34687`.)
516
517:class:`~asyncio.ProactorEventLoop` now also supports UDP.
518(Contributed by Adam Meily and Andrew Svetlov in :issue:`29883`.)
519
520:class:`~asyncio.ProactorEventLoop` can now be interrupted by
521:exc:`KeyboardInterrupt` ("CTRL+C").
522(Contributed by Vladimir Matveev in :issue:`23057`.)
523
Victor Stinner6ea29c52018-09-25 08:27:08 -0700524
Matthias Bussonnier2ddbd212019-05-22 12:07:45 -0700525builtins
526--------
527
528The :func:`compile` built-in has been improved to accept the
529``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag. With this new flag passed,
530:func:`compile` will allow top-level ``await``, ``async for`` and ``async with``
531constructs that are usually considered invalid syntax. Asynchronous code object
532marked with the ``CO_COROUTINE`` flag may then be returned.
533
534(Contributed by Matthias Bussonnier in :issue:`34616`)
Terry Jan Reedyfdcb5ae2018-09-25 12:45:27 -0400535
Raymond Hettinger482b6b52019-05-01 17:48:13 -0700536collections
537-----------
538
539The :meth:`_asdict()` method for :func:`collections.namedtuple` now returns
Daniel Porteous05222912019-05-02 04:20:59 -0400540a :class:`dict` instead of a :class:`collections.OrderedDict`. This works because
541regular dicts have guaranteed ordering since Python 3.7. If the extra
Raymond Hettinger482b6b52019-05-01 17:48:13 -0700542features of :class:`OrderedDict` are required, the suggested remediation is
543to cast the result to the desired type: ``OrderedDict(nt._asdict())``.
544(Contributed by Raymond Hettinger in :issue:`35864`.)
545
546
Steve Dower2438cdf2019-03-29 16:37:16 -0700547ctypes
548------
549
550On Windows, :class:`~ctypes.CDLL` and subclasses now accept a *winmode* parameter
551to specify flags for the underlying ``LoadLibraryEx`` call. The default flags are
552set to only load DLL dependencies from trusted locations, including the path
553where the DLL is stored (if a full or partial path is used to load the initial
554DLL) and paths added by :func:`~os.add_dll_directory`.
555
556
Raymond Hettingerb8218682019-05-26 11:27:35 -0700557functools
558---------
559
560:func:`functools.lru_cache` can now be used as a straight decorator rather
561than as a function returning a decorator. So both of these are now supported::
562
563 @lru_cache
564 def f(x):
565 ...
566
567 @lru_cache(maxsize=256)
568 def f(x):
569 ...
570
571(Contributed by Raymond Hettinger in :issue:`36772`.)
572
573
Paul Ganssle88c09372019-04-29 09:22:03 -0400574datetime
575--------
576
577Added new alternate constructors :meth:`datetime.date.fromisocalendar` and
578:meth:`datetime.datetime.fromisocalendar`, which construct :class:`date` and
579:class:`datetime` objects respectively from ISO year, week number and weekday;
580these are the inverse of each class's ``isocalendar`` method.
581(Contributed by Paul Ganssle in :issue:`36004`.)
582
583
Cheryl Sabella637a33b2018-11-07 09:12:20 -0500584gettext
585-------
586
587Added :func:`~gettext.pgettext` and its variants.
588(Contributed by Franz Glasner, Éric Araujo, and Cheryl Sabella in :issue:`2504`.)
589
Terry Jan Reedya72ca902019-07-31 01:03:53 -0400590
591idlelib and IDLE
592----------------
593
594Output over N lines (50 by default) is squeezed down to a button.
595N can be changed in the PyShell section of the General page of the
596Settings dialog. Fewer, but possibly extra long, lines can be squeezed by
597right clicking on the output. Squeezed output can be expanded in place
598by double-clicking the button or into the clipboard or a separate window
599by right-clicking the button. (Contributed by Tal Einat in :issue:`1529353`.)
600
601Add "Run Customized" to the Run menu to run a module with customized
602settings. Any command line arguments entered are added to sys.argv.
603They also re-appear in the box for the next customized run. One can also
604suppress the normal Shell main module restart. (Contributed by Cheryl
605Sabella, Terry Jan Reedy, and others in :issue:`5680` and :issue:`37627`.)
606
607Add optional line numbers for IDLE editor windows. Windows
608open without line numbers unless set otherwise in the General
609tab of the configuration dialog. Line numbers for an existing
610window are shown and hidden in the Options menu.
611(Contributed by Tal Einat and Saimadhav Heblikar in :issue:`17535`.)
612
613The changes above have been backported to 3.7 maintenance releases.
614
615
Raymond Hettingerd1e768a2019-03-25 13:01:13 -0700616inspect
617-------
618
619The :func:`inspect.getdoc` function can now find docstrings for ``__slots__``
620if that attribute is a :class:`dict` where the values are docstrings.
621This provides documentation options similar to what we already have
622for :func:`property`, :func:`classmethod`, and :func:`staticmethod`::
623
624 class AudioClip:
625 __slots__ = {'bit_rate': 'expressed in kilohertz to one decimal place',
626 'duration': 'in seconds, rounded up to an integer'}
627 def __init__(self, bit_rate, duration):
628 self.bit_rate = round(bit_rate / 1000.0, 1)
629 self.duration = ceil(duration)
Pablo Galindo175421b2019-02-23 03:02:06 +0000630
Terry Jan Reedya72ca902019-07-31 01:03:53 -0400631
Victor Stinnerbc2aa812019-05-23 03:45:09 +0200632io
633--
634
635In development mode (:option:`-X` ``env``) and in debug build, the
636:class:`io.IOBase` finalizer now logs the exception if the ``close()`` method
637fails. The exception is ignored silently by default in release build.
638(Contributed by Victor Stinner in :issue:`18748`.)
639
640
Pablo Galindo175421b2019-02-23 03:02:06 +0000641gc
642--
643
644:func:`~gc.get_objects` can now receive an optional *generation* parameter
645indicating a generation to get objects from. Contributed in
646:issue:`36016` by Pablo Galindo.
647
648
guoci0e7497c2018-11-07 04:50:23 -0500649gzip
650----
651
652Added the *mtime* parameter to :func:`gzip.compress` for reproducible output.
653(Contributed by Guo Ci Teo in :issue:`34898`.)
654
Zackery Spytzcf599f62019-05-13 01:50:52 -0600655A :exc:`~gzip.BadGzipFile` exception is now raised instead of :exc:`OSError`
656for certain types of invalid or corrupt gzip files.
657(Contributed by Filip Gruszczyński, Michele Orrù, and Zackery Spytz in
658:issue:`6584`.)
659
guoci0e7497c2018-11-07 04:50:23 -0500660
Terry Jan Reedyfdcb5ae2018-09-25 12:45:27 -0400661idlelib and IDLE
662----------------
663
Tal Einat7123ea02019-07-23 15:22:11 +0300664Add optional line numbers for IDLE editor windows. Windows
665open without line numbers unless set otherwise in the General
666tab of the configuration dialog.
667(Contributed by Tal Einat and Saimadhav Heblikar in :issue:`17535`.)
668
Terry Jan Reedyfdcb5ae2018-09-25 12:45:27 -0400669Output over N lines (50 by default) is squeezed down to a button.
670N can be changed in the PyShell section of the General page of the
671Settings dialog. Fewer, but possibly extra long, lines can be squeezed by
672right clicking on the output. Squeezed output can be expanded in place
673by double-clicking the button or into the clipboard or a separate window
674by right-clicking the button. (Contributed by Tal Einat in :issue:`1529353`.)
675
676The changes above have been backported to 3.7 maintenance releases.
677
678
HongWeipengf1944792018-11-07 18:09:32 +0800679json.tool
680---------
681
682Add option ``--json-lines`` to parse every input line as separate JSON object.
683(Contributed by Weipeng Hong in :issue:`31553`.)
684
Pablo Galindobc098512019-02-07 07:04:02 +0000685
686math
687----
688
Raymond Hettinger3ff59622019-02-16 11:00:42 -0800689Added new function :func:`math.dist` for computing Euclidean distance
690between two points. (Contributed by Raymond Hettinger in :issue:`33089`.)
691
692Expanded the :func:`math.hypot` function to handle multiple dimensions.
693Formerly, it only supported the 2-D case.
694(Contributed by Raymond Hettinger in :issue:`33089`.)
695
Pablo Galindobc098512019-02-07 07:04:02 +0000696Added new function, :func:`math.prod`, as analogous function to :func:`sum`
697that returns the product of a 'start' value (default: 1) times an iterable of
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -0700698numbers::
699
700 >>> prior = 0.8
701 >>> likelihoods = [0.625, 0.84, 0.30]
702 >>> (link: http://math.prod) math.prod(likelihoods, start=prior)
703 0.126
704
705(Contributed by Pablo Galindo in :issue:`35606`)
Pablo Galindobc098512019-02-07 07:04:02 +0000706
Mark Dickinson73934b92019-05-18 12:29:50 +0100707Added new function :func:`math.isqrt` for computing integer square roots.
708(Contributed by Mark Dickinson in :issue:`36887`.)
709
Mark Dickinsona0adffb2019-06-01 12:21:53 +0100710The function :func:`math.factorial` no longer accepts arguments that are not
711int-like. (Contributed by Pablo Galindo in :issue:`33083`.)
712
Zackery Spytz02db6962019-05-27 10:48:17 -0600713
714mmap
715----
716
717The :class:`mmap.mmap` class now has an :meth:`~mmap.mmap.madvise` method to
718access the ``madvise()`` system call.
719(Contributed by Zackery Spytz in :issue:`32941`.)
720
721
Victor Stinner17a55882019-05-28 16:02:50 +0200722multiprocessing
723---------------
724
725Added new :mod:`multiprocessing.shared_memory` module.
726(Contributed Davin Potts in :issue:`35813`.)
727
728On macOS, the *spawn* start method is now used by default.
729(Contributed by Victor Stinner in :issue:`33725`.)
730
731
Steve Dower2438cdf2019-03-29 16:37:16 -0700732os
733--
734
735Added new function :func:`~os.add_dll_directory` on Windows for providing
736additional search paths for native dependencies when importing extension
737modules or loading DLLs using :mod:`ctypes`.
738
Zackery Spytz43fdbd22019-05-29 13:57:07 -0600739A new :func:`os.memfd_create` function was added to wrap the
740``memfd_create()`` syscall.
741(Contributed by Zackery Spytz and Christian Heimes in :issue:`26836`.)
742
Pablo Galindobc098512019-02-07 07:04:02 +0000743
Serhiy Storchaka0185f342018-09-18 11:28:51 +0300744os.path
745-------
746
747:mod:`os.path` functions that return a boolean result like
748:func:`~os.path.exists`, :func:`~os.path.lexists`, :func:`~os.path.isdir`,
749:func:`~os.path.isfile`, :func:`~os.path.islink`, and :func:`~os.path.ismount`
750now return ``False`` instead of raising :exc:`ValueError` or its subclasses
751:exc:`UnicodeEncodeError` and :exc:`UnicodeDecodeError` for paths that contain
752characters or bytes unrepresentable at the OS level.
753(Contributed by Serhiy Storchaka in :issue:`33721`.)
754
Steve Dower8ef864d2019-03-12 15:15:26 -0700755:func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE`
756environment variable and does not use :envvar:`HOME`, which is not normally set
757for regular user accounts.
758
Serhiy Storchakab232df92018-10-30 13:22:42 +0200759
760ncurses
761-------
762
763Added a new variable holding structured version information for the
764underlying ncurses library: :data:`~curses.ncurses_version`.
765(Contributed by Serhiy Storchaka in :issue:`31680`.)
766
767
Serhiy Storchaka0185f342018-09-18 11:28:51 +0300768pathlib
769-------
770
771:mod:`pathlib.Path` methods that return a boolean result like
772:meth:`~pathlib.Path.exists()`, :meth:`~pathlib.Path.is_dir()`,
773:meth:`~pathlib.Path.is_file()`, :meth:`~pathlib.Path.is_mount()`,
774:meth:`~pathlib.Path.is_symlink()`, :meth:`~pathlib.Path.is_block_device()`,
775:meth:`~pathlib.Path.is_char_device()`, :meth:`~pathlib.Path.is_fifo()`,
776:meth:`~pathlib.Path.is_socket()` now return ``False`` instead of raising
777:exc:`ValueError` or its subclass :exc:`UnicodeEncodeError` for paths that
778contain characters unrepresentable at the OS level.
779(Contributed by Serhiy Storchaka in :issue:`33721`.)
780
Joannah Nanjekye6b5b0132019-05-04 11:27:10 -0400781Added :meth:`pathlib.Path.link_to()` which creates a hard link pointing
782to a path.
783(Contributed by Joannah Nanjekye in :issue:`26978`)
784
jab9e00d9e2018-12-28 13:03:40 -0500785
Pierre Glaserec6c1bd2019-07-01 15:51:57 +0200786pickle
787------
788
789Reduction methods can now include a 6th item in the tuple they return. This
790item should specify a custom state-setting method that's called instead of the
791regular ``__setstate__`` method.
792(Contributed by Pierre Glaser and Olivier Grisel in :issue:`35900`)
793
794:mod:`pickle` extensions subclassing the C-optimized :class:`~pickle.Pickler`
795can now override the pickling logic of functions and classes by defining the
796special :meth:`~pickle.Pickler.reducer_override` method.
797(Contributed by Pierre Glaser and Olivier Grisel in :issue:`35900`)
798
799
Jon Janzenc981ad12019-05-15 22:14:38 +0200800plistlib
801--------
802
803Added new :class:`plistlib.UID` and enabled support for reading and writing
804NSKeyedArchiver-encoded binary plists.
805(Contributed by Jon Janzen in :issue:`26707`.)
806
807
Joannah Nanjekye2e33ecd2019-05-28 13:29:04 -0300808py_compile
809----------
810
811:func:`py_compile.compile` now supports silent mode.
812(Contributed by Joannah Nanjekye in :issue:`22640`.)
813
814
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200815socket
816------
817
818Added :meth:`~socket.create_server()` and :meth:`~socket.has_dualstack_ipv6()`
819convenience functions to automate the necessary tasks usually involved when
820creating a server socket, including accepting both IPv4 and IPv6 connections
821on the same socket. (Contributed by Giampaolo Rodola in :issue:`17561`.)
822
Zackery Spytz8f96c9f2019-05-29 15:02:37 -0600823The :func:`socket.if_nameindex()`, :func:`socket.if_nametoindex()`, and
824:func:`socket.if_indextoname()` functions have been implemented on Windows.
825(Contributed by Zackery Spytz in :issue:`37007`.)
826
Bo Baylesca804952019-05-29 03:06:12 -0500827shlex
828----------
829
830The new :func:`shlex.join` function acts as the inverse of :func:`shlex.split`.
831(Contributed by Bo Bayles in :issue:`32102`.)
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200832
jab9e00d9e2018-12-28 13:03:40 -0500833shutil
834------
835
836:func:`shutil.copytree` now accepts a new ``dirs_exist_ok`` keyword argument.
837(Contributed by Josh Bronson in :issue:`20849`.)
838
CAM Gerlach89a89442019-04-06 23:47:49 -0500839:func:`shutil.make_archive` now defaults to the modern pax (POSIX.1-2001)
840format for new archives to improve portability and standards conformance,
841inherited from the corresponding change to the :mod:`tarfile` module.
842(Contributed by C.A.M. Gerlach in :issue:`30661`.)
843
jab9e00d9e2018-12-28 13:03:40 -0500844
Christian Heimes9fb051f2018-09-23 08:32:31 +0200845ssl
846---
847
848Added :attr:`SSLContext.post_handshake_auth` to enable and
849:meth:`ssl.SSLSocket.verify_client_post_handshake` to initiate TLS 1.3
850post-handshake authentication.
851(Contributed by Christian Heimes in :issue:`34670`.)
852
Raymond Hettinger47d99872019-02-21 15:06:29 -0800853
854statistics
855----------
856
857Added :func:`statistics.fmean` as a faster, floating point variant of
858:func:`statistics.mean()`. (Contributed by Raymond Hettinger and
859Steven D'Aprano in :issue:`35904`.)
860
Raymond Hettinger6463ba32019-04-07 09:20:03 -0700861Added :func:`statistics.geometric_mean()`
862(Contributed by Raymond Hettinger in :issue:`27181`.)
863
Raymond Hettingerfc06a192019-03-12 00:43:27 -0700864Added :func:`statistics.multimode` that returns a list of the most
865common values. (Contributed by Raymond Hettinger in :issue:`35892`.)
866
Raymond Hettinger9013ccf2019-04-23 00:06:35 -0700867Added :func:`statistics.quantiles` that divides data or a distribution
868in to equiprobable intervals (e.g. quartiles, deciles, or percentiles).
869(Contributed by Raymond Hettinger in :issue:`36546`.)
870
Raymond Hettinger11c79532019-02-23 14:44:07 -0800871Added :class:`statistics.NormalDist`, a tool for creating
872and manipulating normal distributions of a random variable.
873(Contributed by Raymond Hettinger in :issue:`36018`.)
874
875::
876
877 >>> temperature_feb = NormalDist.from_samples([4, 12, -3, 2, 7, 14])
Raymond Hettinger671d7822019-05-01 17:49:12 -0700878 >>> temperature_feb.mean
879 6.0
880 >>> temperature_feb.stdev
881 6.356099432828281
Raymond Hettinger11c79532019-02-23 14:44:07 -0800882
883 >>> temperature_feb.cdf(3) # Chance of being under 3 degrees
884 0.3184678262814532
885 >>> # Relative chance of being 7 degrees versus 10 degrees
886 >>> temperature_feb.pdf(7) / temperature_feb.pdf(10)
887 1.2039930378537762
888
Raymond Hettinger671d7822019-05-01 17:49:12 -0700889 >>> el_niño = NormalDist(4, 2.5)
890 >>> temperature_feb += el_niño # Add in a climate effect
Raymond Hettinger11c79532019-02-23 14:44:07 -0800891 >>> temperature_feb
892 NormalDist(mu=10.0, sigma=6.830080526611674)
893
894 >>> temperature_feb * (9/5) + 32 # Convert to Fahrenheit
895 NormalDist(mu=50.0, sigma=12.294144947901014)
896 >>> temperature_feb.samples(3) # Generate random samples
897 [7.672102882379219, 12.000027119750287, 4.647488369766392]
898
Raymond Hettinger47d99872019-02-21 15:06:29 -0800899
Victor Stinneref9d9b62019-05-22 11:28:22 +0200900sys
901---
902
903Add new :func:`sys.unraisablehook` function which can be overridden to control
904how "unraisable exceptions" are handled. It is called when an exception has
905occurred but there is no way for Python to handle it. For example, when a
906destructor raises an exception or during garbage collection
907(:func:`gc.collect`).
Victor Stinner01ae8972019-06-03 16:28:01 +0200908(Contributed by Victor Stinner in :issue:`36829`.)
Victor Stinneref9d9b62019-05-22 11:28:22 +0200909
910
CAM Gerlache680c3d2019-03-21 09:44:51 -0500911tarfile
912-------
913
914The :mod:`tarfile` module now defaults to the modern pax (POSIX.1-2001)
915format for new archives, instead of the previous GNU-specific one.
916This improves cross-platform portability with a consistent encoding (UTF-8)
917in a standardized and extensible format, and offers several other benefits.
918(Contributed by C.A.M. Gerlach in :issue:`36268`.)
919
920
Victor Stinnercd590a72019-05-28 00:39:52 +0200921threading
922---------
923
Jake Tesler84846b02019-07-30 14:41:46 -0700924* Add a new :func:`threading.excepthook` function which handles uncaught
925 :meth:`threading.Thread.run` exception. It can be overridden to control how
926 uncaught :meth:`threading.Thread.run` exceptions are handled.
927 (Contributed by Victor Stinner in :issue:`1230540`.)
928
929* Add a new
930 :func:`threading.get_native_id` function and a :data:`~threading.Thread.native_id`
931 attribute to the :class:`threading.Thread` class. These return the native
932 integral Thread ID of the current thread assigned by the kernel.
933 This feature is only available on certain platforms, see
934 :func:`get_native_id <threading.get_native_id>` for more information.
935 (Contributed by Jake Tesler in :issue:`36084`.)
Victor Stinnercd590a72019-05-28 00:39:52 +0200936
937
Tal Einatdfba1f62018-10-24 10:20:05 +0300938tokenize
939--------
940
941The :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token when
942provided with input that does not have a trailing new line. This behavior
943now matches what the C tokenizer does internally.
944(Contributed by Ammar Askar in :issue:`33899`.)
945
Juliette Monselaf5658a2018-10-08 18:29:24 +0200946tkinter
947-------
948
949Added methods :meth:`~tkinter.Spinbox.selection_from`,
950:meth:`~tkinter.Spinbox.selection_present`,
951:meth:`~tkinter.Spinbox.selection_range` and
952:meth:`~tkinter.Spinbox.selection_to`
953in the :class:`tkinter.Spinbox` class.
954(Contributed by Juliette Monsel in :issue:`34829`.)
955
Juliette Monselbf034712018-10-12 18:44:10 +0200956Added method :meth:`~tkinter.Canvas.moveto`
957in the :class:`tkinter.Canvas` class.
958(Contributed by Juliette Monsel in :issue:`23831`.)
959
Zackery Spytz50866e92019-04-05 04:17:13 -0600960The :class:`tkinter.PhotoImage` class now has
961:meth:`~tkinter.PhotoImage.transparency_get` and
962:meth:`~tkinter.PhotoImage.transparency_set` methods. (Contributed by
963Zackery Spytz in :issue:`25451`.)
964
Joannah Nanjekye572168a2019-01-10 19:56:38 +0300965time
966----
967
968Added new clock :data:`~time.CLOCK_UPTIME_RAW` for macOS 10.12.
969(Contributed by Joannah Nanjekye in :issue:`35702`.)
970
Guido van Rossum9b33ce42019-06-11 13:42:35 -0700971
972typing
973------
974
975The :mod:`typing` module incorporates several new features:
976
977* Protocol definitions. See :pep:`544`, :class:`typing.Protocol` and
978 :func:`typing.runtime_checkable`. Simple ABCs like
979 :class:`typing.SupportsInt` are now ``Protocol`` subclasses.
980
981* A dictionary type with per-key types. See :pep:`589` and
982 :class:`typing.TypedDict`.
983
984* Literal types. See :pep:`586` and :class:`typing.Literal`.
985
986* "Final" variables, functions, methods and classes. See :pep:`591`,
987 :class:`typing.Final` and :func:`typing.final`.
988
989* New protocol class :class:`typing.SupportsIndex`.
990
991* New functions :func:`typing.get_origin` and :func:`typing.get_args`.
992
993
Max Bélanger2810dd72018-11-04 15:58:24 -0800994unicodedata
995-----------
996
Benjamin Peterson3aca40d2019-05-08 20:59:35 -0700997* The :mod:`unicodedata` module has been upgraded to use the `Unicode 12.1.0
998 <http://blog.unicode.org/2019/05/unicode-12-1-en.html>`_ release.
Raymond Hettinger482b6b52019-05-01 17:48:13 -0700999
Max Bélanger2810dd72018-11-04 15:58:24 -08001000* New function :func:`~unicodedata.is_normalized` can be used to verify a string
1001 is in a specific normal form. (Contributed by Max Belanger and David Euresti in
1002 :issue:`32285`).
1003
Raymond Hettinger482b6b52019-05-01 17:48:13 -07001004
Lisa Roach0f221d02018-11-08 18:34:33 -08001005unittest
1006--------
1007
Victor Stinner01ae8972019-06-03 16:28:01 +02001008* Added :class:`AsyncMock` to support an asynchronous version of :class:`Mock`.
Lisa Roach77b3b772019-05-20 09:19:53 -07001009 Appropriate new assert functions for testing have been added as well.
1010 (Contributed by Lisa Roach in :issue:`26467`).
1011
Lisa Roach0f221d02018-11-08 18:34:33 -08001012* Added :func:`~unittest.addModuleCleanup()` and
1013 :meth:`~unittest.TestCase.addClassCleanup()` to unittest to support
1014 cleanups for :func:`~unittest.setUpModule()` and
1015 :meth:`~unittest.TestCase.setUpClass()`.
1016 (Contributed by Lisa Roach in :issue:`24412`.)
1017
Petter Strandmark001d63c2019-06-04 21:34:49 +02001018* Several mock assert functions now also print a list of actual calls upon
1019 failure. (Contributed by Petter Strandmark in :issue:`35047`.)
1020
Brett Cannond64ee1a2018-09-21 15:27:26 -07001021venv
1022----
1023
1024* :mod:`venv` now includes an ``Activate.ps1`` script on all platforms for
1025 activating virtual environments under PowerShell Core 6.1.
1026 (Contributed by Brett Cannon in :issue:`32718`.)
1027
Mark Dickinson7abb6c02019-04-26 15:56:15 +09001028weakref
1029-------
1030
1031* The proxy objects returned by :func:`weakref.proxy` now support the matrix
1032 multiplication operators ``@`` and ``@=`` in addition to the other
1033 numeric operators. (Contributed by Mark Dickinson in :issue:`36669`.)
1034
Christian Heimes17b1d5d2018-09-23 09:50:25 +02001035xml
1036---
1037
1038* As mitigation against DTD and external entity retrieval, the
Andrés Delfinoca682612018-11-07 14:29:14 -03001039 :mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process
Christian Heimes17b1d5d2018-09-23 09:50:25 +02001040 external entities by default.
1041 (Contributed by Christian Heimes in :issue:`17239`.)
1042
Stefan Behnel47541682019-05-03 20:58:16 +02001043* The ``.find*()`` methods in the :mod:`xml.etree.ElementTree` module
1044 support wildcard searches like ``{*}tag`` which ignores the namespace
1045 and ``{namespace}*`` which returns all tags in the given namespace.
1046 (Contributed by Stefan Behnel in :issue:`28238`.)
1047
Stefan Behnele1d5dd62019-05-01 22:34:13 +02001048* The :mod:`xml.etree.ElementTree` module provides a new function
1049 :func:`–xml.etree.ElementTree.canonicalize()` that implements C14N 2.0.
1050 (Contributed by Stefan Behnel in :issue:`13611`.)
1051
Stefan Behnele9a465f2019-05-10 10:25:13 +02001052* The target object of :class:`xml.etree.ElementTree.XMLParser` can
1053 receive namespace declaration events through the new callback methods
1054 ``start_ns()`` and ``end_ns()``. Additionally, the
1055 :class:`xml.etree.ElementTree.TreeBuilder` target can be configured
1056 to process events about comments and processing instructions to include
1057 them in the generated tree.
1058 (Contributed by Stefan Behnel in :issue:`36676` and :issue:`36673`.)
Christian Heimes17b1d5d2018-09-23 09:50:25 +02001059
Ned Deily07a18922018-01-31 18:12:38 -05001060Optimizations
1061=============
1062
Victor Stinner9daecf32019-01-16 00:02:35 +01001063* The :mod:`subprocess` module can now use the :func:`os.posix_spawn` function
1064 in some cases for better performance. Currently, it is only used on macOS
1065 and Linux (using glibc 2.24 or newer) if all these conditions are met:
1066
1067 * *close_fds* is false;
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001068 * *preexec_fn*, *pass_fds*, *cwd* and *start_new_session* parameters
1069 are not set;
Victor Stinner8c349562019-01-16 23:38:06 +01001070 * the *executable* path contains a directory.
Victor Stinner9daecf32019-01-16 00:02:35 +01001071
Victor Stinner01ae8972019-06-03 16:28:01 +02001072 (Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.)
1073
Giampaolo Rodola4a172cc2018-06-12 23:04:50 +02001074* :func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`,
1075 :func:`shutil.copytree` and :func:`shutil.move` use platform-specific
Giampaolo Rodola413d9552019-05-30 14:05:41 +08001076 "fast-copy" syscalls on Linux and macOS in order to copy the file
Giampaolo Rodolac7f02a92018-06-19 08:27:29 -07001077 more efficiently.
Giampaolo Rodola4a172cc2018-06-12 23:04:50 +02001078 "fast-copy" means that the copying operation occurs within the kernel,
1079 avoiding the use of userspace buffers in Python as in
1080 "``outfd.write(infd.read())``".
Giampaolo Rodolac7f02a92018-06-19 08:27:29 -07001081 On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB
1082 instead of 16 KiB) and a :func:`memoryview`-based variant of
1083 :func:`shutil.copyfileobj` is used.
1084 The speedup for copying a 512 MiB file within the same partition is about
1085 +26% on Linux, +50% on macOS and +40% on Windows. Also, much less CPU cycles
1086 are consumed.
1087 See :ref:`shutil-platform-dependent-efficient-copy-operations` section.
Mariatta16501b72018-12-06 21:59:42 -08001088 (Contributed by Giampaolo Rodola' in :issue:`33671`.)
Giampaolo Rodola4a172cc2018-06-12 23:04:50 +02001089
Giampaolo Rodola19c46a42018-11-12 06:18:15 -08001090* :func:`shutil.copytree` uses :func:`os.scandir` function and all copy
1091 functions depending from it use cached :func:`os.stat` values. The speedup
1092 for copying a directory with 8000 files is around +9% on Linux, +20% on
1093 Windows and +30% on a Windows SMB share. Also the number of :func:`os.stat`
1094 syscalls is reduced by 38% making :func:`shutil.copytree` especially faster
1095 on network filesystems. (Contributed by Giampaolo Rodola' in :issue:`33695`.)
1096
Łukasz Langac51d8c92018-04-03 23:06:53 -07001097* The default protocol in the :mod:`pickle` module is now Protocol 4,
1098 first introduced in Python 3.4. It offers better performance and smaller
1099 size compared to Protocol 3 available since Python 3.0.
Ned Deily07a18922018-01-31 18:12:38 -05001100
INADA Naokid5c875b2018-07-11 17:42:49 +09001101* Removed one ``Py_ssize_t`` member from ``PyGC_Head``. All GC tracked
1102 objects (e.g. tuple, list, dict) size is reduced 4 or 8 bytes.
1103 (Contributed by Inada Naoki in :issue:`33597`)
1104
Tal Einat54752532018-09-10 16:11:04 +03001105* :class:`uuid.UUID` now uses ``__slots__`` to reduce its memory footprint.
Tal Einat54752532018-09-10 16:11:04 +03001106
Raymond Hettinger63fa1cf2019-02-16 12:02:22 -08001107* Improved performance of :func:`operator.itemgetter` by 33%. Optimized
1108 argument handling and added a fast path for the common case of a single
1109 non-negative integer index into a tuple (which is the typical use case in
1110 the standard library). (Contributed by Raymond Hettinger in
1111 :issue:`35664`.)
1112
1113* Sped-up field lookups in :func:`collections.namedtuple`. They are now more
1114 than two times faster, making them the fastest form of instance variable
1115 lookup in Python. (Contributed by Raymond Hettinger, Pablo Galindo, and
Joe Jevnikf36f8922019-02-21 16:00:40 -05001116 Joe Jevnik, Serhiy Storchaka in :issue:`32492`.)
Raymond Hettinger63fa1cf2019-02-16 12:02:22 -08001117
Pablo Galindoc61e2292018-10-28 22:03:18 +00001118* The :class:`list` constructor does not overallocate the internal item buffer
1119 if the input iterable has a known length (the input implements ``__len__``).
Raymond Hettingere1823182019-02-16 12:47:48 -08001120 This makes the created list 12% smaller on average. (Contributed by
1121 Raymond Hettinger and Pablo Galindo in :issue:`33234`.)
Pablo Galindoc61e2292018-10-28 22:03:18 +00001122
Stefan Behneld8b9e1f2019-02-20 18:29:24 +01001123* Doubled the speed of class variable writes. When a non-dunder attribute
1124 was updated, there was an unnecessary call to update slots.
1125 (Contributed by Stefan Behnel, Pablo Galindo Salgado, Raymond Hettinger,
1126 Neil Schemenauer, and Serhiy Storchaka in :issue:`36012`.)
1127
Serhiy Storchaka31913912019-03-14 10:32:22 +02001128* Reduced an overhead of converting arguments passed to many builtin functions
1129 and methods. This sped up calling some simple builtin functions and
1130 methods up to 20--50%. (Contributed by Serhiy Storchaka in :issue:`23867`,
1131 :issue:`35582` and :issue:`36127`.)
1132
Inada Naoki91234a12019-06-03 21:30:58 +09001133* ``LOAD_GLOBAL`` instruction now uses new "per opcode cache" mechanism.
1134 It is about 40% faster now. (Contributed by Yury Selivanov and Inada Naoki in
1135 :issue:`26219`.)
1136
Serhiy Storchakaceeef102018-06-15 11:09:43 +03001137
Ned Deily07a18922018-01-31 18:12:38 -05001138Build and C API Changes
1139=======================
1140
Victor Stinner7efc5262019-06-15 03:24:41 +02001141* Default :data:`sys.abiflags` became an empty string: the ``m`` flag for
1142 pymalloc became useless (builds with and without pymalloc are ABI compatible)
1143 and so has been removed. (Contributed by Victor Stinner in :issue:`36707`.)
1144
1145 Example of changes:
1146
1147 * Only ``python3.8`` program is installed, ``python3.8m`` program is gone.
1148 * Only ``python3.8-config`` script is installed, ``python3.8m-config`` script
1149 is gone.
1150 * The ``m`` flag has been removed from the suffix of dynamic library
1151 filenames: extension modules in the standard library as well as those
1152 produced and installed by third-party packages, like those downloaded from
1153 PyPI. On Linux, for example, the Python 3.7 suffix
1154 ``.cpython-37m-x86_64-linux-gnu.so`` became
1155 ``.cpython-38-x86_64-linux-gnu.so`` in Python 3.8.
1156
Victor Stinnerbd5798f2019-06-14 19:43:43 +02001157* The header files have been reorganized to better separate the different kinds
1158 of APIs:
1159
1160 * ``Include/*.h`` should be the portable public stable C API.
1161 * ``Include/cpython/*.h`` should be the unstable C API specific to CPython;
Victor Stinneraf41c562019-06-20 01:44:58 +02001162 public API, with some private API prefixed by ``_Py`` or ``_PY``.
Victor Stinnerbd5798f2019-06-14 19:43:43 +02001163 * ``Include/internal/*.h`` is the private internal C API very specific to
1164 CPython. This API comes with no backward compatibility warranty and should
1165 not be used outside CPython. It is only exposed for very specific needs
1166 like debuggers and profiles which has to access to CPython internals
1167 without calling functions. This API is now installed by ``make install``.
1168
1169 (Contributed by Victor Stinner in :issue:`35134` and :issue:`35081`,
1170 work initiated by Eric Snow in Python 3.7)
1171
1172* Some macros have been converted to static inline functions: parameter types
1173 and return type are well defined, they don't have issues specific to macros,
1174 variables have a local scopes. Examples:
1175
1176 * :c:func:`Py_INCREF`, :c:func:`Py_DECREF`
1177 * :c:func:`Py_XINCREF`, :c:func:`Py_XDECREF`
1178 * :c:func:`PyObject_INIT`, :c:func:`PyObject_INIT_VAR`
1179 * Private functions: :c:func:`_PyObject_GC_TRACK`,
1180 :c:func:`_PyObject_GC_UNTRACK`, :c:func:`_Py_Dealloc`
1181
1182 (Contributed by Victor Stinner in :issue:`35059`.)
1183
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001184* The :c:func:`PyByteArray_Init` and :c:func:`PyByteArray_Fini` functions have
1185 been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were
1186 excluded from the limited API (stable ABI), and were not documented.
Victor Stinnerc68e3fb2019-06-20 22:41:25 +02001187 (Contributed by Victor Stinner in :issue:`35713`.)
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001188
Serhiy Storchakaceeef102018-06-15 11:09:43 +03001189* The result of :c:func:`PyExceptionClass_Name` is now of type
1190 ``const char *`` rather of ``char *``.
1191 (Contributed by Serhiy Storchaka in :issue:`33818`.)
Ned Deily07a18922018-01-31 18:12:38 -05001192
Antoine Pitrou961d54c2018-07-16 19:03:03 +02001193* The duality of ``Modules/Setup.dist`` and ``Modules/Setup`` has been
1194 removed. Previously, when updating the CPython source tree, one had
1195 to manually copy ``Modules/Setup.dist`` (inside the source tree) to
1196 ``Modules/Setup`` (inside the build tree) in order to reflect any changes
1197 upstream. This was of a small benefit to packagers at the expense of
1198 a frequent annoyance to developers following CPython development, as
1199 forgetting to copy the file could produce build failures.
1200
1201 Now the build system always reads from ``Modules/Setup`` inside the source
1202 tree. People who want to customize that file are encouraged to maintain
1203 their changes in a git fork of CPython or as patch files, as they would do
1204 for any other change to the source tree.
1205
1206 (Contributed by Antoine Pitrou in :issue:`32430`.)
1207
Serhiy Storchaka6a44f6e2019-02-25 17:57:58 +02001208* Functions that convert Python number to C integer like
1209 :c:func:`PyLong_AsLong` and argument parsing functions like
1210 :c:func:`PyArg_ParseTuple` with integer converting format units like ``'i'``
1211 will now use the :meth:`~object.__index__` special method instead of
1212 :meth:`~object.__int__`, if available. The deprecation warning will be
1213 emitted for objects with the ``__int__()`` method but without the
1214 ``__index__()`` method (like :class:`~decimal.Decimal` and
1215 :class:`~fractions.Fraction`). :c:func:`PyNumber_Check` will now return
1216 ``1`` for objects implementing ``__index__()``.
Serhiy Storchakabdbad712019-06-02 00:05:48 +03001217 :c:func:`PyNumber_Long`, :c:func:`PyNumber_Float` and
1218 :c:func:`PyFloat_AsDouble` also now use the ``__index__()`` method if
1219 available.
1220 (Contributed by Serhiy Storchaka in :issue:`36048` and :issue:`20092`.)
Serhiy Storchaka6a44f6e2019-02-25 17:57:58 +02001221
Eddie Elizondo364f0b02019-03-27 07:52:18 -04001222* Heap-allocated type objects will now increase their reference count
1223 in :c:func:`PyObject_Init` (and its parallel macro ``PyObject_INIT``)
1224 instead of in :c:func:`PyType_GenericAlloc`. Types that modify instance
1225 allocation or deallocation may need to be adjusted.
1226 (Contributed by Eddie Elizondo in :issue:`35810`.)
1227
Pablo Galindo4a2edc32019-07-01 11:35:05 +01001228* The new function :c:func:`PyCode_NewWithPosOnlyArgs` allows to create
1229 code objects like :c:func:`PyCode_New`, but with an extra *posonlyargcount*
1230 parameter for indicating the number of positional-only arguments.
1231 (Contributed by Pablo Galindo in :issue:`37221`.)
1232
Ned Deily07a18922018-01-31 18:12:38 -05001233
1234Deprecated
1235==========
1236
Victor Stinner1da44622019-07-05 10:44:12 +02001237* The distutils ``bdist_wininst`` command is now deprecated, use
1238 ``bdist_wheel`` (wheel packages) instead.
1239 (Contributed by Victor Stinner in :issue:`37481`.)
1240
Serhiy Storchaka02ec92f2018-07-24 12:03:34 +03001241* Deprecated methods ``getchildren()`` and ``getiterator()`` in
1242 the :mod:`~xml.etree.ElementTree` module emit now a
1243 :exc:`DeprecationWarning` instead of :exc:`PendingDeprecationWarning`.
1244 They will be removed in Python 3.9.
1245 (Contributed by Serhiy Storchaka in :issue:`29209`.)
Ned Deily07a18922018-01-31 18:12:38 -05001246
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001247* Passing an object that is not an instance of
1248 :class:`concurrent.futures.ThreadPoolExecutor` to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001249 :meth:`asyncio.loop.set_default_executor()` is
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001250 deprecated and will be prohibited in Python 3.9.
1251 (Contributed by Elvis Pranskevichus in :issue:`34075`.)
1252
Berker Peksagef8861c2018-08-21 17:58:49 +03001253* The :meth:`__getitem__` methods of :class:`xml.dom.pulldom.DOMEventStream`,
1254 :class:`wsgiref.util.FileWrapper` and :class:`fileinput.FileInput` have been
1255 deprecated.
1256
1257 Implementations of these methods have been ignoring their *index* parameter,
1258 and returning the next item instead.
1259
1260 (Contributed by Berker Peksag in :issue:`9372`.)
1261
Raymond Hettingerf7b57df2019-03-18 09:53:56 -07001262* The :class:`typing.NamedTuple` class has deprecated the ``_field_types``
1263 attribute in favor of the ``__annotations__`` attribute which has the same
1264 information. (Contributed by Raymond Hettinger in :issue:`36320`.)
1265
Serhiy Storchaka3f228112018-09-27 17:42:37 +03001266* :mod:`ast` classes ``Num``, ``Str``, ``Bytes``, ``NameConstant`` and
1267 ``Ellipsis`` are considered deprecated and will be removed in future Python
1268 versions. :class:`~ast.Constant` should be used instead.
1269 (Contributed by Serhiy Storchaka in :issue:`32892`.)
1270
Serhiy Storchakafec35c92018-10-27 08:00:41 +03001271* The following functions and methods are deprecated in the :mod:`gettext`
1272 module: :func:`~gettext.lgettext`, :func:`~gettext.ldgettext`,
1273 :func:`~gettext.lngettext` and :func:`~gettext.ldngettext`.
1274 They return encoded bytes, and it's possible that you will get unexpected
1275 Unicode-related exceptions if there are encoding problems with the
1276 translated strings. It's much better to use alternatives which return
1277 Unicode strings in Python 3. These functions have been broken for a long time.
1278
1279 Function :func:`~gettext.bind_textdomain_codeset`, methods
1280 :meth:`~gettext.NullTranslations.output_charset` and
1281 :meth:`~gettext.NullTranslations.set_output_charset`, and the *codeset*
1282 parameter of functions :func:`~gettext.translation` and
1283 :func:`~gettext.install` are also deprecated, since they are only used for
1284 for the ``l*gettext()`` functions.
1285
1286 (Contributed by Serhiy Storchaka in :issue:`33710`.)
1287
Dong-hee Na89669ff2019-01-17 21:14:45 +09001288* The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread` has been deprecated.
1289 (Contributed by Dong-hee Na in :issue:`35283`.)
Ned Deily07a18922018-01-31 18:12:38 -05001290
Serhiy Storchaka6a44f6e2019-02-25 17:57:58 +02001291* Many builtin and extension functions that take integer arguments will
1292 now emit a deprecation warning for :class:`~decimal.Decimal`\ s,
1293 :class:`~fractions.Fraction`\ s and any other objects that can be converted
1294 to integers only with a loss (e.g. that have the :meth:`~object.__int__`
1295 method but do not have the :meth:`~object.__index__` method). In future
1296 version they will be errors.
1297 (Contributed by Serhiy Storchaka in :issue:`36048`.)
1298
Serhiy Storchaka42a139e2019-04-01 09:16:35 +03001299* Deprecated passing the following arguments as keyword arguments:
1300
1301 - *func* in :func:`functools.partialmethod`, :func:`weakref.finalize`,
1302 :meth:`profile.Profile.runcall`, :meth:`cProfile.Profile.runcall`,
1303 :meth:`bdb.Bdb.runcall`, :meth:`trace.Trace.runfunc` and
1304 :func:`curses.wrapper`.
Serhiy Storchaka2085bd02019-06-01 11:00:15 +03001305 - *function* in :meth:`unittest.TestCase.addCleanup`.
Serhiy Storchaka42a139e2019-04-01 09:16:35 +03001306 - *fn* in the :meth:`~concurrent.futures.Executor.submit` method of
1307 :class:`concurrent.futures.ThreadPoolExecutor` and
1308 :class:`concurrent.futures.ProcessPoolExecutor`.
1309 - *callback* in :meth:`contextlib.ExitStack.callback`,
1310 :meth:`contextlib.AsyncExitStack.callback` and
1311 :meth:`contextlib.AsyncExitStack.push_async_callback`.
1312 - *c* and *typeid* in the :meth:`~multiprocessing.managers.Server.create`
1313 method of :class:`multiprocessing.managers.Server` and
1314 :class:`multiprocessing.managers.SharedMemoryServer`.
1315 - *obj* in :func:`weakref.finalize`.
1316
1317 In future releases of Python they will be :ref:`positional-only
1318 <positional-only_parameter>`.
1319 (Contributed by Serhiy Storchaka in :issue:`36492`.)
1320
Serhiy Storchaka6a44f6e2019-02-25 17:57:58 +02001321
Victor Stinner73104fa2018-11-29 09:58:20 +01001322API and Feature Removals
1323========================
1324
1325The following features and APIs have been removed from Python 3.8:
1326
Victor Stinnerd7538dd2018-12-14 13:37:26 +01001327* The :mod:`macpath` module, deprecated in Python 3.7, has been removed.
1328 (Contributed by Victor Stinner in :issue:`35471`.)
1329
Victor Stinner73104fa2018-11-29 09:58:20 +01001330* The function :func:`platform.popen` has been removed, it was deprecated since
1331 Python 3.3: use :func:`os.popen` instead.
Victor Stinner01ae8972019-06-03 16:28:01 +02001332 (Contributed by Victor Stinner in :issue:`35345`.)
Ned Deily07a18922018-01-31 18:12:38 -05001333
Matthias Bussonnierb6a09ae2019-05-13 12:23:07 -07001334* The function :func:`time.clock` has been removed, it was deprecated since Python
1335 3.3: use :func:`time.perf_counter` or :func:`time.process_time` instead, depending
1336 on your requirements, to have a well defined behavior.
Victor Stinner01ae8972019-06-03 16:28:01 +02001337 (Contributed by Matthias Bussonnier in :issue:`36895`.)
Matthias Bussonnierb6a09ae2019-05-13 12:23:07 -07001338
Brett Cannona8c34242018-04-20 14:15:40 -07001339* The ``pyvenv`` script has been removed in favor of ``python3.8 -m venv``
1340 to help eliminate confusion as to what Python interpreter the ``pyvenv``
1341 script is tied to. (Contributed by Brett Cannon in :issue:`25427`.)
Ned Deily07a18922018-01-31 18:12:38 -05001342
INADA Naoki698865d2018-06-19 17:28:50 +09001343* ``parse_qs``, ``parse_qsl``, and ``escape`` are removed from :mod:`cgi`
1344 module. They are deprecated from Python 3.2 or older.
1345
INADA Naoki461a1c42018-06-28 17:10:36 +09001346* ``filemode`` function is removed from :mod:`tarfile` module.
1347 It is not documented and deprecated since Python 3.3.
INADA Naoki698865d2018-06-19 17:28:50 +09001348
Serhiy Storchaka02ec92f2018-07-24 12:03:34 +03001349* The :class:`~xml.etree.ElementTree.XMLParser` constructor no longer accepts
1350 the *html* argument. It never had effect and was deprecated in Python 3.4.
1351 All other parameters are now :ref:`keyword-only <keyword-only_parameter>`.
1352 (Contributed by Serhiy Storchaka in :issue:`29209`.)
1353
1354* Removed the ``doctype()`` method of :class:`~xml.etree.ElementTree.XMLParser`.
1355 (Contributed by Serhiy Storchaka in :issue:`29209`.)
1356
Inada Naoki6a16b182019-03-18 15:44:11 +09001357* "unicode_internal" codec is removed.
1358 (Contributed by Inada Naoki in :issue:`36297`.)
1359
Aviv Palivodae6576242019-05-09 21:05:45 +03001360* The ``Cache`` and ``Statement`` objects of the :mod:`sqlite3` module are not
1361 exposed to the user.
1362 (Contributed by Aviv Palivoda in :issue:`30262`.)
1363
Matthias Bussonnier1a3faf92019-05-20 13:44:11 -07001364* The ``bufsize`` keyword argument of :func:`fileinput.input` and
1365 :func:`fileinput.FileInput` which was ignored and deprecated since Python 3.6
1366 has been removed. :issue:`36952` (Contributed by Matthias Bussonnier)
1367
Matthias Bussonnier382034b2019-05-28 10:30:35 -07001368* The functions :func:`sys.set_coroutine_wrapper` and
1369 :func:`sys.get_coroutine_wrapper` deprecated in Python 3.7 have been removed;
1370 :issue:`36933` (Contributed by Matthias Bussonnier)
Matthias Bussonnier3880f262019-05-28 00:10:59 -07001371
Ned Deily07a18922018-01-31 18:12:38 -05001372
1373Porting to Python 3.8
1374=====================
1375
1376This section lists previously described changes and other bugfixes
1377that may require changes to your code.
1378
1379
Serhiy Storchaka07ca9af2018-02-04 10:53:48 +02001380Changes in Python behavior
1381--------------------------
1382
1383* Yield expressions (both ``yield`` and ``yield from`` clauses) are now disallowed
1384 in comprehensions and generator expressions (aside from the iterable expression
Serhiy Storchaka2b57c432018-12-19 08:09:46 +02001385 in the leftmost :keyword:`!for` clause).
Serhiy Storchaka07ca9af2018-02-04 10:53:48 +02001386 (Contributed by Serhiy Storchaka in :issue:`10544`.)
1387
Serhiy Storchaka3bcbedc2019-01-18 07:47:48 +02001388* The compiler now produces a :exc:`SyntaxWarning` when identity checks
1389 (``is`` and ``is not``) are used with certain types of literals
1390 (e.g. strings, ints). These can often work by accident in CPython,
1391 but are not guaranteed by the language spec. The warning advises users
1392 to use equality tests (``==`` and ``!=``) instead.
1393 (Contributed by Serhiy Storchaka in :issue:`34850`.)
1394
Serhiy Storchaka7a0630c2019-04-08 14:34:04 +03001395* The CPython interpreter can swallow exceptions in some circumstances.
1396 In Python 3.8 this happens in less cases. In particular, exceptions
1397 raised when getting the attribute from the type dictionary are no longer
1398 ignored. (Contributed by Serhiy Storchaka in :issue:`35459`.)
1399
Serhiy Storchaka96aeaec2019-05-06 22:29:40 +03001400* Removed ``__str__`` implementations from builtin types :class:`bool`,
1401 :class:`int`, :class:`float`, :class:`complex` and few classes from
1402 the standard library. They now inherit ``__str__()`` from :class:`object`.
1403 As result, defining the ``__repr__()`` method in the subclass of these
1404 classes will affect they string representation.
1405 (Contributed by Serhiy Storchaka in :issue:`36793`.)
1406
Michael Felt9d949f72019-04-12 16:15:32 +02001407* On AIX, :attr:`sys.platform` doesn't contain the major version anymore.
1408 It is always ``'aix'``, instead of ``'aix3'`` .. ``'aix7'``. Since
1409 older Python versions include the version number, it is recommended to
1410 always use the ``sys.platform.startswith('aix')``.
1411 (Contributed by M. Felt in :issue:`36588`.)
Serhiy Storchaka07ca9af2018-02-04 10:53:48 +02001412
Joannah Nanjekyef781d202019-04-29 04:38:45 -04001413* :c:func:`PyEval_AcquireLock` and :c:func:`PyEval_AcquireThread` now
1414 terminate the current thread if called while the interpreter is
1415 finalizing, making them consistent with :c:func:`PyEval_RestoreThread`,
1416 :c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`. If this
1417 behaviour is not desired, guard the call by checking :c:func:`_Py_IsFinalizing`
1418 or :c:func:`sys.is_finalizing`.
1419
Serhiy Storchaka97f1ca12018-02-01 18:49:21 +02001420Changes in the Python API
1421-------------------------
1422
Victor Stinner689830e2019-06-26 17:31:12 +02001423* The :func:`os.getcwdb` function now uses the UTF-8 encoding on Windows,
1424 rather than the ANSI code page: see :pep:`529` for the rationale. The
1425 function is no longer deprecated on Windows.
1426 (Contributed by Victor Stinner in :issue:`37412`.)
1427
Victor Stinnerd7befad2019-04-25 14:30:16 +02001428* :class:`subprocess.Popen` can now use :func:`os.posix_spawn` in some cases
1429 for better performance. On Windows Subsystem for Linux and QEMU User
1430 Emulation, Popen constructor using :func:`os.posix_spawn` no longer raise an
1431 exception on errors like missing program, but the child process fails with a
1432 non-zero :attr:`~Popen.returncode`.
Victor Stinner01ae8972019-06-03 16:28:01 +02001433 (Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.)
Victor Stinnerd7befad2019-04-25 14:30:16 +02001434
Victor Stinner74125a62019-04-15 18:23:20 +02001435* The :meth:`imap.IMAP4.logout` method no longer ignores silently arbitrary
1436 exceptions.
1437
Victor Stinner73104fa2018-11-29 09:58:20 +01001438* The function :func:`platform.popen` has been removed, it was deprecated since
1439 Python 3.3: use :func:`os.popen` instead.
Victor Stinner01ae8972019-06-03 16:28:01 +02001440 (Contributed by Victor Stinner in :issue:`35345`.)
Victor Stinner73104fa2018-11-29 09:58:20 +01001441
Raymond Hettingerfc06a192019-03-12 00:43:27 -07001442* The :func:`statistics.mode` function no longer raises an exception
1443 when given multimodal data. Instead, it returns the first mode
1444 encountered in the input data. (Contributed by Raymond Hettinger
1445 in :issue:`35892`.)
1446
Serhiy Storchaka97f1ca12018-02-01 18:49:21 +02001447* The :meth:`~tkinter.ttk.Treeview.selection` method of the
1448 :class:`tkinter.ttk.Treeview` class no longer takes arguments. Using it with
1449 arguments for changing the selection was deprecated in Python 3.6. Use
1450 specialized methods like :meth:`~tkinter.ttk.Treeview.selection_set` for
1451 changing the selection. (Contributed by Serhiy Storchaka in :issue:`31508`.)
Serhiy Storchaka6c85efa52018-02-05 22:47:31 +02001452
Diego Rojas06e1e682019-03-16 18:44:56 -05001453* The :meth:`writexml`, :meth:`toxml` and :meth:`toprettyxml` methods of the
1454 :mod:`xml.dom.minidom` module, and :mod:`xml.etree` now preserve the attribute
1455 order specified by the user.
1456 (Contributed by Diego Rojas and Raymond Hettinger in :issue:`34160`.)
1457
Serhiy Storchaka6c85efa52018-02-05 22:47:31 +02001458* A :mod:`dbm.dumb` database opened with flags ``'r'`` is now read-only.
1459 :func:`dbm.dumb.open` with flags ``'r'`` and ``'w'`` no longer creates
1460 a database if it does not exist.
1461 (Contributed by Serhiy Storchaka in :issue:`32749`.)
Serhiy Storchaka520b7ae2018-02-22 23:33:30 +02001462
Serhiy Storchaka02ec92f2018-07-24 12:03:34 +03001463* The ``doctype()`` method defined in a subclass of
1464 :class:`~xml.etree.ElementTree.XMLParser` will no longer be called and will
1465 cause emitting a :exc:`RuntimeWarning` instead of a :exc:`DeprecationWarning`.
1466 Define the :meth:`doctype() <xml.etree.ElementTree.TreeBuilder.doctype>`
1467 method on a target for handling an XML doctype declaration.
1468 (Contributed by Serhiy Storchaka in :issue:`29209`.)
1469
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +03001470* A :exc:`RuntimeError` is now raised when the custom metaclass doesn't
1471 provide the ``__classcell__`` entry in the namespace passed to
1472 ``type.__new__``. A :exc:`DeprecationWarning` was emitted in Python
1473 3.6--3.7. (Contributed by Serhiy Storchaka in :issue:`23722`.)
1474
Scott Sandersoncebe80b2018-06-07 05:46:42 -04001475* The :class:`cProfile.Profile` class can now be used as a context
1476 manager. (Contributed by Scott Sanderson in :issue:`29235`.)
Serhiy Storchaka520b7ae2018-02-22 23:33:30 +02001477
Giampaolo Rodolac7f02a92018-06-19 08:27:29 -07001478* :func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`,
1479 :func:`shutil.copytree` and :func:`shutil.move` use platform-specific
1480 "fast-copy" syscalls (see
1481 :ref:`shutil-platform-dependent-efficient-copy-operations` section).
1482
1483* :func:`shutil.copyfile` default buffer size on Windows was changed from
1484 16 KiB to 1 MiB.
1485
Raymond Hettinger4f9ffc92019-08-05 13:33:19 -07001486* The ``PyGC_Head`` struct has changed completely. All code that touched the
INADA Naokid5c875b2018-07-11 17:42:49 +09001487 struct member should be rewritten. (See :issue:`33597`)
1488
Eric Snowbe3b2952019-02-23 11:35:52 -07001489* The ``PyInterpreterState`` struct has been moved into the "internal"
1490 header files (specifically Include/internal/pycore_pystate.h). An
1491 opaque ``PyInterpreterState`` is still available as part of the public
1492 API (and stable ABI). The docs indicate that none of the struct's
1493 fields are public, so we hope no one has been using them. However,
1494 if you do rely on one or more of those private fields and have no
1495 alternative then please open a BPO issue. We'll work on helping
1496 you adjust (possibly including adding accessor functions to the
1497 public API). (See :issue:`35886`.)
1498
Alex Grönholmcca4eec2018-08-09 00:06:47 +03001499* Asyncio tasks can now be named, either by passing the ``name`` keyword
1500 argument to :func:`asyncio.create_task` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001501 the :meth:`~asyncio.loop.create_task` event loop method, or by
Alex Grönholmcca4eec2018-08-09 00:06:47 +03001502 calling the :meth:`~asyncio.Task.set_name` method on the task object. The
1503 task name is visible in the ``repr()`` output of :class:`asyncio.Task` and
1504 can also be retrieved using the :meth:`~asyncio.Task.get_name` method.
1505
Berker Peksage7d4b2f2018-08-22 21:21:05 +03001506* The :meth:`mmap.flush() <mmap.mmap.flush>` method now returns ``None`` on
1507 success and raises an exception on error under all platforms. Previously,
1508 its behavior was platform-depended: a nonzero value was returned on success;
1509 zero was returned on error under Windows. A zero value was returned on
1510 success; an exception was raised on error under Unix.
1511 (Contributed by Berker Peksag in :issue:`2122`.)
1512
Andrés Delfinoca682612018-11-07 14:29:14 -03001513* :mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process
Christian Heimes17b1d5d2018-09-23 09:50:25 +02001514 external entities by default.
1515 (Contributed by Christian Heimes in :issue:`17239`.)
INADA Naokid5c875b2018-07-11 17:42:49 +09001516
Xiang Zhang4fb0b8b2018-12-12 20:46:55 +08001517* Deleting a key from a read-only :mod:`dbm` database (:mod:`dbm.dumb`,
1518 :mod:`dbm.gnu` or :mod:`dbm.ndbm`) raises :attr:`error` (:exc:`dbm.dumb.error`,
1519 :exc:`dbm.gnu.error` or :exc:`dbm.ndbm.error`) instead of :exc:`KeyError`.
1520 (Contributed by Xiang Zhang in :issue:`33106`.)
1521
Steve Dower8ef864d2019-03-12 15:15:26 -07001522* :func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE`
1523 environment variable and does not use :envvar:`HOME`, which is not normally
1524 set for regular user accounts.
1525
Steve Dower2438cdf2019-03-29 16:37:16 -07001526.. _bpo-36085-whatsnew:
1527
1528* DLL dependencies for extension modules and DLLs loaded with :mod:`ctypes` on
1529 Windows are now resolved more securely. Only the system paths, the directory
1530 containing the DLL or PYD file, and directories added with
1531 :func:`~os.add_dll_directory` are searched for load-time dependencies.
1532 Specifically, :envvar:`PATH` and the current working directory are no longer
1533 used, and modifications to these will no longer have any effect on normal DLL
1534 resolution. If your application relies on these mechanisms, you should check
1535 for :func:`~os.add_dll_directory` and if it exists, use it to add your DLLs
Steve Dower79da3882019-03-30 20:58:17 -07001536 directory while loading your library. Note that Windows 7 users will need to
1537 ensure that Windows Update KB2533625 has been installed (this is also verified
1538 by the installer).
Steve Dower2438cdf2019-03-29 16:37:16 -07001539 (See :issue:`36085`.)
1540
Pablo Galindof2cf1e32019-04-13 17:05:14 +01001541* The header files and functions related to pgen have been removed after its
1542 replacement by a pure Python implementation. (Contributed by Pablo Galindo
1543 in :issue:`36623`.)
1544
Pablo Galindo5d23e282019-05-12 22:45:52 +01001545* :class:`types.CodeType` has a new parameter in the second position of the
1546 constructor (*posonlyargcount*) to support positional-only arguments defined
Pablo Galindocd74e662019-06-01 18:08:04 +01001547 in :pep:`570`. The first argument (*argcount*) now represents the total
1548 number of positional arguments (including positional-only arguments). A new
1549 ``replace()`` method of :class:`types.CodeType` can be used to make the code
1550 future-proof.
Pablo Galindo5d23e282019-05-12 22:45:52 +01001551
Xiang Zhang4fb0b8b2018-12-12 20:46:55 +08001552
Inada Naokid3c72a22019-03-23 21:04:40 +09001553Changes in the C API
1554--------------------
1555
Victor Stinner2c9b4982019-06-13 02:01:29 +02001556* The :c:type:`PyCompilerFlags` structure gets a new *cf_feature_version*
1557 field. It should be initialized to ``PY_MINOR_VERSION``. The field is ignored
1558 by default, it is used if and only if ``PyCF_ONLY_AST`` flag is set in
1559 *cf_flags*.
1560
Victor Stinnerd5d9e812019-05-13 12:35:37 +02001561* The :c:func:`PyEval_ReInitThreads` function has been removed from the C API.
1562 It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child`
1563 instead.
1564 (Contributed by Victor Stinner in :issue:`36728`.)
1565
E. M. Brayc994c8f2019-05-24 17:33:47 +02001566* On Unix, C extensions are no longer linked to libpython except on Android
1567 and Cygwin. When Python is embedded, ``libpython`` must not be loaded with
xdegaye254b3092019-04-29 09:27:40 +02001568 ``RTLD_LOCAL``, but ``RTLD_GLOBAL`` instead. Previously, using
E. M. Brayc994c8f2019-05-24 17:33:47 +02001569 ``RTLD_LOCAL``, it was already not possible to load C extensions which
1570 were not linked to ``libpython``, like C extensions of the standard
1571 library built by the ``*shared*`` section of ``Modules/Setup``.
Victor Stinner01ae8972019-06-03 16:28:01 +02001572 (Contributed by Victor Stinner in :issue:`21536`.)
Victor Stinner8c3ecc62019-04-25 20:13:10 +02001573
Inada Naokid3c72a22019-03-23 21:04:40 +09001574* Use of ``#`` variants of formats in parsing or building value (e.g.
1575 :c:func:`PyArg_ParseTuple`, :c:func:`Py_BuildValue`, :c:func:`PyObject_CallFunction`,
1576 etc.) without ``PY_SSIZE_T_CLEAN`` defined raises ``DeprecationWarning`` now.
1577 It will be removed in 3.10 or 4.0. Read :ref:`arg-parsing` for detail.
1578 (Contributed by Inada Naoki in :issue:`36381`.)
1579
Eddie Elizondo364f0b02019-03-27 07:52:18 -04001580* Instances of heap-allocated types (such as those created with
1581 :c:func:`PyType_FromSpec`) hold a reference to their type object.
1582 Increasing the reference count of these type objects has been moved from
1583 :c:func:`PyType_GenericAlloc` to the more low-level functions,
1584 :c:func:`PyObject_Init` and :c:func:`PyObject_INIT`.
1585 This makes types created through :c:func:`PyType_FromSpec` behave like
1586 other classes in managed code.
1587
1588 Statically allocated types are not affected.
1589
1590 For the vast majority of cases, there should be no side effect.
1591 However, types that manually increase the reference count after allocating
1592 an instance (perhaps to work around the bug) may now become immortal.
1593 To avoid this, these classes need to call Py_DECREF on the type object
1594 during instance deallocation.
1595
1596 To correctly port these types into 3.8, please apply the following
1597 changes:
1598
1599 * Remove :c:macro:`Py_INCREF` on the type object after allocating an
1600 instance - if any.
1601 This may happen after calling :c:func:`PyObject_New`,
1602 :c:func:`PyObject_NewVar`, :c:func:`PyObject_GC_New`,
1603 :c:func:`PyObject_GC_NewVar`, or any other custom allocator that uses
1604 :c:func:`PyObject_Init` or :c:func:`PyObject_INIT`.
1605
1606 Example::
1607
1608 static foo_struct *
1609 foo_new(PyObject *type) {
1610 foo_struct *foo = PyObject_GC_New(foo_struct, (PyTypeObject *) type);
1611 if (foo == NULL)
1612 return NULL;
1613 #if PY_VERSION_HEX < 0x03080000
1614 // Workaround for Python issue 35810; no longer necessary in Python 3.8
1615 PY_INCREF(type)
1616 #endif
1617 return foo;
1618 }
1619
1620 * Ensure that all custom ``tp_dealloc`` functions of heap-allocated types
1621 decrease the type's reference count.
1622
1623 Example::
1624
1625 static void
1626 foo_dealloc(foo_struct *instance) {
1627 PyObject *type = Py_TYPE(instance);
1628 PyObject_GC_Del(instance);
1629 #if PY_VERSION_HEX >= 0x03080000
1630 // This was not needed before Python 3.8 (Python issue 35810)
1631 Py_DECREF(type);
1632 #endif
1633 }
1634
1635 (Contributed by Eddie Elizondo in :issue:`35810`.)
1636
Zackery Spytz3c8724f2019-05-28 09:16:33 -06001637* The :c:macro:`Py_DEPRECATED()` macro has been implemented for MSVC.
1638 The macro now must be placed before the symbol name.
1639
1640 Example::
1641
1642 Py_DEPRECATED(3.8) PyAPI_FUNC(int) Py_OldFunction(void);
1643
1644 (Contributed by Zackery Spytz in :issue:`33407`.)
1645
Antoine Pitrouada319b2019-05-29 22:12:38 +02001646* The interpreter does not pretend to support binary compatibility of
Xtreak0d702272019-06-03 04:42:33 +05301647 extension types across feature releases, anymore. A :c:type:`PyTypeObject`
Antoine Pitrouada319b2019-05-29 22:12:38 +02001648 exported by a third-party extension module is supposed to have all the
1649 slots expected in the current Python version, including
1650 :c:member:`~PyTypeObject.tp_finalize` (:const:`Py_TPFLAGS_HAVE_FINALIZE`
1651 is not checked anymore before reading :c:member:`~PyTypeObject.tp_finalize`).
1652
1653 (Contributed by Antoine Pitrou in :issue:`32388`.)
1654
Pablo Galindo545a3b82019-05-31 19:33:41 +01001655* The :c:func:`PyCode_New` has a new parameter in the second position (*posonlyargcount*)
1656 to support :pep:`570`, indicating the number of positional-only arguments.
1657
Ivan Levkivskyi47c2de72019-06-19 01:17:47 +01001658* The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now accept
1659 two additional ``int`` arguments *end_lineno* and *end_col_offset*.
Eddie Elizondo364f0b02019-03-27 07:52:18 -04001660
Steve Dowerf5690922019-06-21 14:28:46 -07001661.. highlight:: shell
1662
1663* The :file:`libpython38.a` file to allow MinGW tools to link directly against
1664 :file:`python38.dll` is no longer included in the regular Windows distribution.
1665 If you require this file, it may be generated with the ``gendef`` and
1666 ``dlltool`` tools, which are part of the MinGW binutils package::
1667
1668 gendef python38.dll > tmp.def
1669 dlltool --dllname python38.dll --def tmp.def --output-lib libpython38.a
1670
1671 The location of an installed :file:`pythonXY.dll` will depend on the
1672 installation options and the version and language of Windows. See
1673 :ref:`using-on-windows` for more information. The resulting library should be
1674 placed in the same directory as :file:`pythonXY.lib`, which is generally the
1675 :file:`libs` directory under your Python installation.
1676
1677.. highlight:: python3
1678
1679
Serhiy Storchaka520b7ae2018-02-22 23:33:30 +02001680CPython bytecode changes
1681------------------------
1682
1683* The interpreter loop has been simplified by moving the logic of unrolling
1684 the stack of blocks into the compiler. The compiler emits now explicit
Serhiy Storchaka3f819ca2018-10-31 02:26:06 +02001685 instructions for adjusting the stack of values and calling the
1686 cleaning-up code for :keyword:`break`, :keyword:`continue` and
1687 :keyword:`return`.
Serhiy Storchaka520b7ae2018-02-22 23:33:30 +02001688
1689 Removed opcodes :opcode:`BREAK_LOOP`, :opcode:`CONTINUE_LOOP`,
1690 :opcode:`SETUP_LOOP` and :opcode:`SETUP_EXCEPT`. Added new opcodes
1691 :opcode:`ROT_FOUR`, :opcode:`BEGIN_FINALLY`, :opcode:`CALL_FINALLY` and
1692 :opcode:`POP_FINALLY`. Changed the behavior of :opcode:`END_FINALLY`
1693 and :opcode:`WITH_CLEANUP_START`.
1694
1695 (Contributed by Mark Shannon, Antoine Pitrou and Serhiy Storchaka in
1696 :issue:`17611`.)
Serhiy Storchaka702f8f32018-03-23 14:34:35 +02001697
1698* Added new opcode :opcode:`END_ASYNC_FOR` for handling exceptions raised
1699 when awaiting a next item in an :keyword:`async for` loop.
1700 (Contributed by Serhiy Storchaka in :issue:`33041`.)
Raymond Hettingerf75d59e2019-02-02 22:54:56 -08001701
Pablo Galindob51b7132019-06-25 02:41:58 +01001702* The :opcode:`MAP_ADD` now expects the value as the first element in the
1703 stack and the key as the second element. This change was made so the key
1704 is always evaluated before the value in dictionary comprehensions, as
Pablo Galindode9b6062019-06-25 11:55:23 +01001705 proposed by :pep:`572`. (Contributed by Jörn Heissler in :issue:`35224`.)
Pablo Galindob51b7132019-06-25 02:41:58 +01001706
Raymond Hettingerf75d59e2019-02-02 22:54:56 -08001707
1708Demos and Tools
1709---------------
1710
1711* Added a benchmark script for timing various ways to access variables:
1712 ``Tools/scripts/var_access_benchmark.py``.
1713 (Contributed by Raymond Hettinger in :issue:`35884`.)