blob: 9363730bf1fd6437aac0040d82369c766a949cb1 [file] [log] [blame]
Ned Deily4829bc62016-09-12 17:29:04 -04001****************************
2 What's New In Python 3.7
3****************************
4
5:Release: |release|
6:Date: |today|
7
8.. Rules for maintenance:
9
10 * Anyone can add text to this document. Do not spend very much time
11 on the wording of your changes, because your text will probably
12 get rewritten to some degree.
13
14 * The maintainer will go through Misc/NEWS periodically and add
15 changes; it's therefore more important to add your changes to
16 Misc/NEWS than to this file.
17
18 * This is not a complete list of every single change; completeness
19 is the purpose of Misc/NEWS. Some changes I consider too small
20 or esoteric to include. If such a change is added to the text,
21 I'll just remove it. (This is another reason you shouldn't spend
22 too much time on writing your addition.)
23
24 * If you want to draw your new text to the attention of the
25 maintainer, add 'XXX' to the beginning of the paragraph or
26 section.
27
28 * It's OK to just add a fragmentary note about a change. For
29 example: "XXX Describe the transmogrify() function added to the
30 socket module." The maintainer will research the change and
31 write the necessary text.
32
33 * You can comment out your additions if you like, but it's not
34 necessary (especially when a final release is some months away).
35
36 * Credit the author of a patch or bugfix. Just the name is
37 sufficient; the e-mail address isn't necessary.
38
39 * It's helpful to add the bug/patch number as a comment:
40
41 XXX Describe the transmogrify() function added to the socket
42 module.
43 (Contributed by P.Y. Developer in :issue:`12345`.)
44
45 This saves the maintainer the effort of going through the Mercurial log
46 when researching a change.
47
48This article explains the new features in Python 3.7, compared to 3.6.
49
Steve Dower3e7d93d2016-09-22 17:11:53 -070050For full details, see the :ref:`changelog <changelog>`.
Ned Deily4829bc62016-09-12 17:29:04 -040051
52.. note::
53
54 Prerelease users should be aware that this document is currently in draft
55 form. It will be updated substantially as Python 3.7 moves towards release,
56 so it's worth checking back even after reading earlier versions.
57
58
59Summary -- Release highlights
60=============================
61
62.. This section singles out the most important changes in Python 3.7.
63 Brevity is key.
64
65
66.. PEP-sized items next.
67
68
69
70New Features
71============
72
Nick Coghlan6ea41862017-06-11 13:16:15 +100073.. _whatsnew37-pep538:
74
75PEP 538: Legacy C Locale Coercion
76---------------------------------
77
78An ongoing challenge within the Python 3 series has been determining a sensible
79default strategy for handling the "7-bit ASCII" text encoding assumption
80currently implied by the use of the default C locale on non-Windows platforms.
81
82:pep:`538` updates the default interpreter command line interface to
83automatically coerce that locale to an available UTF-8 based locale as
84described in the documentation of the new :envvar:`PYTHONCOERCECLOCALE`
85environment variable. Automatically setting ``LC_CTYPE`` this way means that
86both the core interpreter and locale-aware C extensions (such as
87:mod:`readline`) will assume the use of UTF-8 as the default text encoding,
88rather than ASCII.
89
90The platform support definition in :pep:`11` has also been updated to limit
91full text handling support to suitably configured non-ASCII based locales.
92
93As part of this change, the default error handler for ``stdin`` and ``stdout``
94is now ``surrogateescape`` (rather than ``strict``) when using any of the
95defined coercion target locales (currently ``C.UTF-8``, ``C.utf8``, and
96``UTF-8``). The default error handler for ``stderr`` continues to be
97``backslashreplace``, regardless of locale.
98
Nick Coghlaneb817952017-06-18 12:29:42 +100099Locale coercion is silent by default, but to assist in debugging potentially
100locale related integration problems, explicit warnings (emitted directly on
101``stderr`` can be requested by setting ``PYTHONCOERCECLOCALE=warn``. This
102setting will also cause the Python runtime to emit a warning if the legacy C
103locale remains active when the core interpreter is initialized.
Nick Coghlan6ea41862017-06-11 13:16:15 +1000104
105.. seealso::
106
107 :pep:`538` -- Coercing the legacy C locale to a UTF-8 based locale
108 PEP written and implemented by Nick Coghlan.
Ned Deily4829bc62016-09-12 17:29:04 -0400109
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400110.. _whatsnew37-pep553:
111
112PEP 553: Built-in breakpoint()
113------------------------------
114
115:pep:`553` describes a new built-in called ``breakpoint()`` which makes it
116easy and consistent to enter the Python debugger. Built-in ``breakpoint()``
117calls ``sys.breakpointhook()``. By default, this latter imports ``pdb`` and
118then calls ``pdb.set_trace()``, but by binding ``sys.breakpointhook()`` to the
119function of your choosing, ``breakpoint()`` can enter any debugger. Or, the
120environment variable :envvar:`PYTHONBREAKPOINT` can be set to the callable of
121your debugger of choice. Set ``PYTHONBREAKPOINT=0`` to completely disable
122built-in ``breakpoint()``.
123
124.. seealso::
125
126 :pep:`553` -- Built-in breakpoint()
127 PEP written and implemented by Barry Warsaw
128
Ned Deily4829bc62016-09-12 17:29:04 -0400129
Masayuki Yamamoto731e1892017-10-06 19:41:34 +0900130.. _whatsnew37-pep539:
131
132PEP 539: A New C-API for Thread-Local Storage in CPython
133--------------------------------------------------------
134
135While Python provides a C API for thread-local storage support; the existing
136:ref:`Thread Local Storage (TLS) API <thread-local-storage-api>` has used
137:c:type:`int` to represent TLS keys across all platforms. This has not
138generally been a problem for officially-support platforms, but that is neither
139POSIX-compliant, nor portable in any practical sense.
140
141:pep:`539` changes this by providing a new :ref:`Thread Specific Storage (TSS)
142API <thread-specific-storage-api>` to CPython which supersedes use of the
143existing TLS API within the CPython interpreter, while deprecating the existing
144API. The TSS API uses a new type :c:type:`Py_tss_t` instead of :c:type:`int`
145to represent TSS keys--an opaque type the definition of which may depend on
146the underlying TLS implementation. Therefore, this will allow to build CPython
147on platforms where the native TLS key is defined in a way that cannot be safely
148cast to :c:type:`int`.
149
150Note that on platforms where the native TLS key is defined in a way that cannot
151be safely cast to :c:type:`int`, all functions of the existing TLS API will be
152no-op and immediately return failure. This indicates clearly that the old API
153is not supported on platforms where it cannot be used reliably, and that no
154effort will be made to add such support.
155
156.. seealso::
157
158 :pep:`539` -- A New C-API for Thread-Local Storage in CPython
159 PEP written by Erik M. Bray; implementation by Masayuki Yamamoto.
160
161
Victor Stinnerc29b5852017-11-02 07:28:27 -0700162PEP 564: Add new time functions with nanosecond resolution
163----------------------------------------------------------
164
165Add six new "nanosecond" variants of existing functions to the :mod:`time`
166module:
167
168* :func:`time.clock_gettime_ns`
169* :func:`time.clock_settime_ns`
170* :func:`time.monotonic_ns`
171* :func:`time.perf_counter_ns`
172* :func:`time.process_time_ns`
173* :func:`time.time_ns`
174
175While similar to the existing functions without the ``_ns`` suffix, they
176provide nanosecond resolution: they return a number of nanoseconds as a Python
177``int``.
178
179The ``time.time_ns()`` resolution is 3 times better than the ``time.time()``
180resolution on Linux and Windows.
181
182.. seealso::
183
184 :pep:`564` -- Add new time functions with nanosecond resolution
185 PEP written and implemented by Victor Stinner
186
187
Victor Stinner5e3806f2017-11-30 11:40:24 +0100188New Development Mode: -X dev
189----------------------------
Victor Stinnerccb04422017-11-16 03:20:31 -0800190
Victor Stinner5e3806f2017-11-30 11:40:24 +0100191Add a new "development mode": ``-X dev`` command line option to enable debug
Victor Stinnerccb04422017-11-16 03:20:31 -0800192checks at runtime.
193
194In short, ``python3 -X dev ...`` behaves as ``PYTHONMALLOC=debug python3 -W
195default -X faulthandler ...``, except that the PYTHONMALLOC environment
196variable is not set in practice.
197
198See :option:`-X` ``dev`` for the details.
199
200
Ned Deily4829bc62016-09-12 17:29:04 -0400201Other Language Changes
202======================
203
Serhiy Storchaka5bb8b912016-12-16 19:19:02 +0200204* More than 255 arguments can now be passed to a function, and a function can
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800205 now have more than 255 parameters. (Contributed by Serhiy Storchaka in
206 :issue:`12844` and :issue:`18896`.)
Ned Deily4829bc62016-09-12 17:29:04 -0400207
Serhiy Storchakadd1da7f2016-12-19 18:51:37 +0200208* :meth:`bytes.fromhex` and :meth:`bytearray.fromhex` now ignore all ASCII
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800209 whitespace, not only spaces. (Contributed by Robert Xiao in :issue:`28927`.)
Serhiy Storchakadd1da7f2016-12-19 18:51:37 +0200210
Matthias Bussonnier1bc15642017-02-22 07:06:50 -0800211* :exc:`ImportError` now displays module name and module ``__file__`` path when
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800212 ``from ... import ...`` fails. (Contributed by Matthias Bussonnier in :issue:`29546`.)
Matthias Bussonnier1bc15642017-02-22 07:06:50 -0800213
Serhiy Storchakaf93234b2017-05-09 22:31:05 +0300214* Circular imports involving absolute imports with binding a submodule to
215 a name are now supported.
216 (Contributed by Serhiy Storchaka in :issue:`30024`.)
217
Serhiy Storchaka7e19dbc2017-05-13 12:40:52 +0300218* ``object.__format__(x, '')`` is now equivalent to ``str(x)`` rather than
219 ``format(str(self), '')``.
220 (Contributed by Serhiy Storchaka in :issue:`28974`.)
221
Ned Deily4829bc62016-09-12 17:29:04 -0400222
223New Modules
224===========
225
226* None yet.
227
228
229Improved Modules
230================
231
Pierre Quentelcc3fa202017-05-08 14:08:34 +0200232
R. David Murray0f6b9d22017-09-06 20:25:40 -0400233argparse
234--------
235
236The :meth:`~argparse.ArgumentParser.parse_intermixed_args` supports letting
237the user intermix options and positional arguments on the command line,
238as is possible in many unix commands. It supports most but not all
239argparse features. (Contributed by paul.j3 in :issue:`14191`.)
240
241
Xiang Zhang13f1f422017-05-03 11:16:21 +0800242binascii
243--------
244
245The :func:`~binascii.b2a_uu` function now accepts an optional *backtick*
246keyword argument. When it's true, zeros are represented by ``'`'``
247instead of spaces. (Contributed by Xiang Zhang in :issue:`30103`.)
248
Oz N Tiram8b7a4cc2017-06-06 11:35:59 +0200249
250calendar
251--------
252
Walter Dörwaldf5c58c72017-06-26 18:31:52 +0200253The class :class:`~calendar.HTMLCalendar` has new class attributes which ease
254the customisation of the CSS classes in the produced HTML calendar.
Oz N Tiram8b7a4cc2017-06-06 11:35:59 +0200255(Contributed by Oz Tiram in :issue:`30095`.)
256
257cgi
258---
259
260:func:`~cgi.parse_multipart` returns the same results as
261:class:`~FieldStorage` : for non-file fields, the value associated to a key
262is a list of strings, not bytes.
263(Contributed by Pierre Quentel in :issue:`29979`.)
264
Jelle Zijlstra2e624692017-04-30 18:25:58 -0700265contextlib
266----------
267
268:func:`contextlib.asynccontextmanager` has been added. (Contributed by
269Jelle Zijlstra in :issue:`29679`.)
270
Sanyam Khurana7973e272017-11-08 16:20:56 +0530271cProfile
272--------
273
274cProfile command line now accepts `-m module_name` as an alternative to
275script path. (Contributed by Sanyam Khurana in :issue:`21862`.)
276
Serhiy Storchakaeab3ff72017-10-24 19:36:17 +0300277crypt
278-----
279
280Added support for the Blowfish method.
281(Contributed by Serhiy Storchaka in :issue:`31664`.)
282
Serhiy Storchakacede8c92017-11-16 13:22:51 +0200283The :func:`~crypt.mksalt` function now allows to specify the number of rounds
284for hashing. (Contributed by Serhiy Storchaka in :issue:`31702`.)
285
Serhiy Storchaka1efbf922017-06-11 14:09:39 +0300286dis
287---
288
289The :func:`~dis.dis` function now is able to
290disassemble nested code objects (the code of comprehensions, generator
291expressions and nested functions, and the code used for building nested
292classes). (Contributed by Serhiy Storchaka in :issue:`11822`.)
293
Ryan Gonzalezf9f87f02017-04-14 04:00:25 -0500294distutils
295---------
296
297README.rst is now included in the list of distutils standard READMEs and
298therefore included in source distributions.
299(Contributed by Ryan Gonzalez in :issue:`11913`.)
300
Neil Schemenauer8837dd02017-12-04 18:58:12 -0800301:class:`distutils.core.setup` now warns if the ``classifiers``, ``keywords``
302and ``platforms`` fields are not specified as a list or a string.
Berker Peksagdcaed6b2017-11-23 21:34:20 +0300303(Contributed by Berker Peksag in :issue:`19610`.)
304
Nir Sofferad455cd2017-11-06 23:16:37 +0200305http.client
306-----------
307
308Add Configurable *blocksize* to ``HTTPConnection`` and
309``HTTPSConnection`` for improved upload throughput.
310(Contributed by Nir Soffer in :issue:`31945`.)
311
Pierre Quentel351adda2017-04-02 12:26:12 +0200312http.server
313-----------
314
315:class:`~http.server.SimpleHTTPRequestHandler` supports the HTTP
316If-Modified-Since header. The server returns the 304 response status if the
317target file was not modified after the time specified in the header.
318(Contributed by Pierre Quentel in :issue:`29654`.)
319
Stéphane Wirtela17a2f52017-05-24 09:29:06 +0200320Add the parameter ``directory`` to the :class:`~http.server.SimpleHTTPRequestHandler`
321and the ``--directory`` to the command line of the module :mod:`~http.server`.
322With this parameter, the server serves the specified directory, by default it uses the current working directory.
323(Contributed by Stéphane Wirtel and Julien Palard in :issue:`28707`.)
324
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800325locale
326------
327
328Added another argument *monetary* in :meth:`format_string` of :mod:`locale`.
329If *monetary* is true, the conversion uses monetary thousands separator and
330grouping strings. (Contributed by Garvit in :issue:`10379`.)
331
Mark Dickinsona0ce3752017-04-05 18:34:27 +0100332math
333----
334
335New :func:`~math.remainder` function, implementing the IEEE 754-style remainder
336operation. (Contributed by Mark Dickinson in :issue:`29962`.)
337
Serhiy Storchaka8f6b3442017-03-07 14:33:21 +0200338os
339--
340
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800341Added support for :class:`bytes` paths in :func:`~os.fwalk`. (Contributed by
342Serhiy Storchaka in :issue:`28682`.)
Serhiy Storchaka8f6b3442017-03-07 14:33:21 +0200343
Serhiy Storchakaea720fe2017-03-30 09:12:31 +0300344Added support for :ref:`file descriptors <path_fd>` in :func:`~os.scandir`
345on Unix. (Contributed by Serhiy Storchaka in :issue:`25996`.)
346
Antoine Pitrouf7ecfac2017-05-28 11:35:14 +0200347New function :func:`os.register_at_fork` allows registering Python callbacks
348to be executed on a process fork. (Contributed by Antoine Pitrou in
349:issue:`16500`.)
350
Barry Warsaw35425d62017-09-22 12:29:42 -0400351pdb
352---
353
Berker Peksag12d60562017-11-04 15:17:56 +0300354:func:`~pdb.set_trace` now takes an optional *header* keyword-only
Barry Warsaw35425d62017-09-22 12:29:42 -0400355argument. If given, this is printed to the console just before debugging
Berker Peksag12d60562017-11-04 15:17:56 +0300356begins. (Contributed by Barry Warsaw in :issue:`31389`.)
Barry Warsaw35425d62017-09-22 12:29:42 -0400357
Serhiy Storchaka3557b052017-10-24 23:31:42 +0300358re
359--
360
361The flags :const:`re.ASCII`, :const:`re.LOCALE` and :const:`re.UNICODE`
362can be set within the scope of a group.
363(Contributed by Serhiy Storchaka in :issue:`31690`.)
364
Serhiy Storchaka70d56fb2017-12-04 14:29:05 +0200365:func:`re.split` now supports splitting on a pattern like ``r'\b'``,
366``'^$'`` or ``(?=-)`` that matches an empty string.
367(Contributed by Serhiy Storchaka in :issue:`25054`.)
368
Barry Warsaw973b9012017-09-04 17:29:27 -0400369string
370------
371
372:class:`string.Template` now lets you to optionally modify the regular
373expression pattern for braced placeholders and non-braced placeholders
374separately. (Contributed by Barry Warsaw in :issue:`1198569`.)
375
Victor Stinner5e3806f2017-11-30 11:40:24 +0100376sys
377---
378
379Added :attr:`sys.flags.dev_mode` flag for the new development mode.
380
Victor Stinnera64ce972017-11-02 04:19:19 -0700381time
382----
383
Victor Stinnerc29b5852017-11-02 07:28:27 -0700384The :pep:`564` added six new functions with nanosecond resolution:
385
386* :func:`time.clock_gettime_ns`
387* :func:`time.clock_settime_ns`
388* :func:`time.monotonic_ns`
389* :func:`time.perf_counter_ns`
390* :func:`time.process_time_ns`
391* :func:`time.time_ns`
392
Victor Stinnera64ce972017-11-02 04:19:19 -0700393Add new clock identifiers:
394
395* :data:`time.CLOCK_BOOTTIME` (Linux): Identical to
396 :data:`time.CLOCK_MONOTONIC`, except it also includes any time that the
397 system is suspended.
398* :data:`time.CLOCK_PROF` (FreeBSD, NetBSD and OpenBSD): High-resolution
399 per-process timer from the CPU.
400* :data:`time.CLOCK_UPTIME` (FreeBSD, OpenBSD): Time whose absolute value is
401 the time the system has been running and not suspended, providing accurate
402 uptime measurement, both absolute and interval.
403
Antoine Pitrou4bd41c92017-11-15 22:52:21 +0100404Added functions :func:`time.thread_time` and :func:`time.thread_time_ns`
405to get per-thread CPU time measurements.
406(Contributed by Antoine Pitrou in :issue:`32025`.)
407
Jonas Haag4d193bc2017-11-28 20:40:44 +0100408
409unittest
410--------
411Added new command-line option ``-k`` to filter tests to run with a substring or
412Unix shell-like pattern. For example, ``python -m unittest -k foo`` runs the
413tests ``foo_tests.SomeTest.test_something``, ``bar_tests.SomeTest.test_foo``,
414but not ``bar_tests.FooTest.test_something``.
415
416
Serhiy Storchakad9c956f2017-01-11 20:13:03 +0200417unittest.mock
418-------------
419
420The :const:`~unittest.mock.sentinel` attributes now preserve their identity
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800421when they are :mod:`copied <copy>` or :mod:`pickled <pickle>`. (Contributed by
422Serhiy Storchaka in :issue:`20804`.)
Serhiy Storchakad9c956f2017-01-11 20:13:03 +0200423
Mario Corchero552be9d2017-10-17 12:35:11 +0100424New function :const:`~unittest.mock.seal` will disable the creation of mock
425children by preventing to get or set any new attribute on the sealed mock.
426The sealing process is performed recursively. (Contributed by Mario Corchero
427in :issue:`30541`.)
428
Xiang Zhang267b9d22017-02-28 17:12:52 +0800429xmlrpc.server
430-------------
431
432:meth:`register_function` of :class:`xmlrpc.server.SimpleXMLRPCDispatcher` and
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800433its subclasses can be used as a decorator. (Contributed by Xiang Zhang in
434:issue:`7769`.)
Xiang Zhang267b9d22017-02-28 17:12:52 +0800435
Benjamin Peterson279a9622017-06-22 22:31:08 -0700436unicodedata
437-----------
438
439The internal :mod:`unicodedata` database has been upgraded to use `Unicode 10
440<http://www.unicode.org/versions/Unicode10.0.0/>`_. (Contributed by Benjamin
441Peterson.)
442
Ratnadeep Debnath21024f02017-02-25 14:30:28 +0530443urllib.parse
444------------
445
Daniel Himmelsteindadca482017-08-10 21:45:12 -0400446:func:`urllib.parse.quote` has been updated from RFC 2396 to RFC 3986,
Ratnadeep Debnath21024f02017-02-25 14:30:28 +0530447adding `~` to the set of characters that is never quoted by default.
448(Contributed by Christian Theune and Ratnadeep Debnath in :issue:`16285`.)
449
Xiang Zhang13f1f422017-05-03 11:16:21 +0800450uu
451--
452
453Function :func:`~uu.encode` now accepts an optional *backtick*
454keyword argument. When it's true, zeros are represented by ``'`'``
455instead of spaces. (Contributed by Xiang Zhang in :issue:`30103`.)
456
scoder101a5e82017-09-30 15:35:21 +0200457xml.etree
458---------
459
460:ref:`ElementPath <elementtree-xpath>` predicates in the :meth:`find`
461methods can now compare text of the current node with ``[. = "text"]``,
462not only text in children. Predicates also allow adding spaces for
463better readability. (Contributed by Stefan Behnel in :issue:`31648`.)
464
Paul Moore0780bf72017-08-26 18:04:12 +0100465zipapp
466------
467
468Function :func:`zipapp.create_archive` now accepts an optional *filter*
Zhiming Wangd87b1052017-09-29 13:31:52 -0400469argument to allow the user to select which files should be included in the
470archive, and an optional *compressed* argument to generate a compressed
Paul Moore0780bf72017-08-26 18:04:12 +0100471archive.
472
Zhiming Wangd87b1052017-09-29 13:31:52 -0400473A command line option ``--compress`` has also been added to support
474compression.
475
Ned Deily4829bc62016-09-12 17:29:04 -0400476
477Optimizations
478=============
479
Yury Selivanovf2392132016-12-13 19:03:51 -0500480* Added two new opcodes: ``LOAD_METHOD`` and ``CALL_METHOD`` to avoid
481 instantiation of bound method objects for method calls, which results
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800482 in method calls being faster up to 20%. (Contributed by Yury Selivanov and
483 INADA Naoki in :issue:`26110`.)
Yury Selivanovf2392132016-12-13 19:03:51 -0500484
Serhiy Storchaka0a58f722017-03-30 09:11:10 +0300485* Searching some unlucky Unicode characters (like Ukrainian capital "Є")
Cody Scott72fa3012017-11-09 13:58:59 -0500486 in a string was up to 25 times slower than searching other characters.
487 Now it is slower only by 3 times in the worst case.
Serhiy Storchaka0a58f722017-03-30 09:11:10 +0300488 (Contributed by Serhiy Storchaka in :issue:`24821`.)
489
Serhiy Storchaka97553fd2017-03-11 23:37:16 +0200490* Fast implementation from standard C library is now used for functions
Paul Romano992f6132017-09-15 12:00:57 -0500491 :func:`~math.erf` and :func:`~math.erfc` in the :mod:`math` module.
492 (Contributed by Serhiy Storchaka in :issue:`26121`.)
Serhiy Storchaka97553fd2017-03-11 23:37:16 +0200493
Serhiy Storchakaea720fe2017-03-30 09:12:31 +0300494* The :func:`os.fwalk` function has been sped up by 2 times. This was done
495 using the :func:`os.scandir` function.
496 (Contributed by Serhiy Storchaka in :issue:`25996`.)
497
Serhiy Storchakad4d79bc2017-11-04 14:16:35 +0200498* The :func:`shutil.rmtree` function has been sped up to 20--40%.
499 This was done using the :func:`os.scandir` function.
500 (Contributed by Serhiy Storchaka in :issue:`28564`.)
501
Serhiy Storchaka6d336a02017-05-09 23:37:14 +0300502* Optimized case-insensitive matching and searching of :mod:`regular
503 expressions <re>`. Searching some patterns can now be up to 20 times faster.
504 (Contributed by Serhiy Storchaka in :issue:`30285`.)
505
INADA Naokic1c47c12017-10-05 17:19:26 +0900506* :func:`re.compile` now converts ``flags`` parameter to int object if
507 it is ``RegexFlag``. It is now as fast as Python 3.5, and faster than
Cody Scott72fa3012017-11-09 13:58:59 -0500508 Python 3.6 by about 10% depending on the pattern.
INADA Naokic1c47c12017-10-05 17:19:26 +0900509 (Contributed by INADA Naoki in :issue:`31671`.)
510
Giampaolo Rodolafbfaa6f2017-06-09 22:20:41 +0200511* :meth:`selectors.EpollSelector.modify`, :meth:`selectors.PollSelector.modify`
512 and :meth:`selectors.DevpollSelector.modify` may be around 10% faster under
513 heavy loads. (Contributed by Giampaolo Rodola' in :issue:`30014`)
Ned Deily4829bc62016-09-12 17:29:04 -0400514
515Build and C API Changes
516=======================
517
Zachary Waref40d4dd2016-09-17 01:25:24 -0500518* A full copy of libffi is no longer bundled for use when building the
519 :mod:`_ctypes <ctypes>` module on non-OSX UNIX platforms. An installed copy
520 of libffi is now required when building ``_ctypes`` on such platforms.
521 Contributed by Zachary Ware in :issue:`27979`.
Ned Deily4829bc62016-09-12 17:29:04 -0400522
Serhiy Storchaka007d7ff2016-11-22 07:58:08 +0200523* The fields :c:member:`name` and :c:member:`doc` of structures
524 :c:type:`PyMemberDef`, :c:type:`PyGetSetDef`,
525 :c:type:`PyStructSequence_Field`, :c:type:`PyStructSequence_Desc`,
526 and :c:type:`wrapperbase` are now of type ``const char *`` rather of
527 ``char *``. (Contributed by Serhiy Storchaka in :issue:`28761`.)
528
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200529* The result of :c:func:`PyUnicode_AsUTF8AndSize` and :c:func:`PyUnicode_AsUTF8`
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800530 is now of type ``const char *`` rather of ``char *``. (Contributed by Serhiy
531 Storchaka in :issue:`28769`.)
Serhiy Storchaka2a404b62017-01-22 23:07:07 +0200532
Oren Milman0ccc0f62017-10-08 11:17:46 +0300533* The result of :c:func:`PyMapping_Keys`, :c:func:`PyMapping_Values` and
534 :c:func:`PyMapping_Items` is now always a list, rather than a list or a
535 tuple. (Contributed by Oren Milman in :issue:`28280`.)
536
Serhiy Storchaka6e08baf2017-01-25 13:27:44 +0200537* Added functions :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices`.
538 (Contributed by Serhiy Storchaka in :issue:`27867`.)
539
Antoine Pitrouf7ecfac2017-05-28 11:35:14 +0200540* :c:func:`PyOS_AfterFork` is deprecated in favour of the new functions
541 :c:func:`PyOS_BeforeFork`, :c:func:`PyOS_AfterFork_Parent` and
542 :c:func:`PyOS_AfterFork_Child`. (Contributed by Antoine Pitrou in
543 :issue:`16500`.)
544
Zachary Warecb8c0482017-06-15 22:34:59 -0500545* The Windows build process no longer depends on Subversion to pull in external
546 sources, a Python script is used to download zipfiles from GitHub instead.
547 If Python 3.6 is not found on the system (via ``py -3.6``), NuGet is used to
548 download a copy of 32-bit Python for this purpose. (Contributed by Zachary
549 Ware in :issue:`30450`.)
550
xdegaye56d1f5c2017-10-26 15:09:06 +0200551* The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
552 has been removed as its members being never cleared may cause a segfault
553 during finalization of the interpreter. Contributed by Xavier de Gaye in
554 :issue:`22898` and :issue:`30697`.
555
Antoine Pitroua6a4dc82017-09-07 18:56:24 +0200556* Support for building ``--without-threads`` is removed.
557 (Contributed by Antoine Pitrou in :issue:`31370`.).
558
Ned Deily4829bc62016-09-12 17:29:04 -0400559
Nick Coghlan5a851672017-09-08 10:14:16 +1000560Other CPython Implementation Changes
561====================================
562
563* Trace hooks may now opt out of receiving ``line`` events from the interpreter
564 by setting the new ``f_trace_lines`` attribute to :const:`False` on the frame
565 being traced. (Contributed by Nick Coghlan in :issue:`31344`.)
566
567* Trace hooks may now opt in to receiving ``opcode`` events from the interpreter
568 by setting the new ``f_trace_opcodes`` attribute to :const:`True` on the frame
569 being traced. (Contributed by Nick Coghlan in :issue:`31344`.)
570
571
Ned Deily4829bc62016-09-12 17:29:04 -0400572Deprecated
573==========
574
Serhiy Storchaka73a7e9b2017-12-01 06:54:17 +0200575* Yield expressions (both ``yield`` and ``yield from`` clauses) are now deprecated
576 in comprehensions and generator expressions (aside from the iterable expression
577 in the leftmost :keyword:`for` clause). This ensures that comprehensions
578 always immediately return a container of the appropriate type (rather than
579 potentially returning a :term:`generator iterator` object), while generator
580 expressions won't attempt to interleave their implicit output with the output
581 from any explicit yield expressions.
582
583 In Python 3.7, such expressions emit :exc:`DeprecationWarning` when compiled,
584 in Python 3.8+ they will emit :exc:`SyntaxError`. (Contributed by Serhiy
585 Storchaka in :issue:`10544`.)
586
Serhiy Storchaka6e08baf2017-01-25 13:27:44 +0200587- Function :c:func:`PySlice_GetIndicesEx` is deprecated and replaced with
588 a macro if ``Py_LIMITED_API`` is not set or set to the value between
589 ``0x03050400`` and ``0x03060000`` (not including) or ``0x03060100`` or
590 higher. (Contributed by Serhiy Storchaka in :issue:`27867`.)
Ned Deily4829bc62016-09-12 17:29:04 -0400591
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800592- Deprecated :meth:`format` from :mod:`locale`, use the :meth:`format_string`
593 instead. (Contributed by Garvit in :issue:`10379`.)
594
Matthias Bussonnier1d4601c2017-02-15 18:00:32 -0800595- Methods
596 :meth:`MetaPathFinder.find_module() <importlib.abc.MetaPathFinder.find_module>`
597 (replaced by
598 :meth:`MetaPathFinder.find_spec() <importlib.abc.MetaPathFinder.find_spec>`
599 ) and
600 :meth:`PathEntryFinder.find_loader() <importlib.abc.PathEntryFinder.find_loader>`
601 (replaced by
602 :meth:`PathEntryFinder.find_spec() <importlib.abc.PathEntryFinder.find_spec>`)
603 both deprecated in Python 3.4 now emit :exc:`DeprecationWarning`. (Contributed
604 by Matthias Bussonnier in :issue:`29576`)
605
Serhiy Storchakaf6595982017-03-12 13:15:01 +0200606- Using non-integer value for selecting a plural form in :mod:`gettext` is
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800607 now deprecated. It never correctly worked. (Contributed by Serhiy Storchaka
608 in :issue:`28692`.)
Serhiy Storchakaf6595982017-03-12 13:15:01 +0200609
Victor Stinner89a1c932017-05-15 11:01:21 +0200610- The :mod:`macpath` is now deprecated and will be removed in Python 3.8.
611
Ned Deily4829bc62016-09-12 17:29:04 -0400612
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200613Changes in the C API
614--------------------
615
616- The type of results of :c:func:`PyThread_start_new_thread` and
617 :c:func:`PyThread_get_thread_ident`, and the *id* parameter of
618 :c:func:`PyThreadState_SetAsyncExc` changed from :c:type:`long` to
619 :c:type:`unsigned long`.
620 (Contributed by Serhiy Storchaka in :issue:`6532`.)
621
Serhiy Storchakae613e6a2017-06-27 16:03:14 +0300622- :c:func:`PyUnicode_AsWideCharString` now raises a :exc:`ValueError` if the
623 second argument is *NULL* and the :c:type:`wchar_t*` string contains null
624 characters. (Contributed by Serhiy Storchaka in :issue:`30708`.)
625
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200626
Steve (Gadget) Barnes5b8f9722017-06-28 20:14:52 +0100627Windows Only
628------------
629- The python launcher, (py.exe), can accept 32 & 64 bit specifiers **without**
630 having to specify a minor version as well. So ``py -3-32`` and ``py -3-64``
631 become valid as well as ``py -3.7-32``, also the -*m*-64 and -*m.n*-64 forms
632 are now accepted to force 64 bit python even if 32 bit would have otherwise
633 been used. If the specified version is not available py.exe will error exit.
634 (Contributed by Steve Barnes in :issue:`30291`.)
635
636- The launcher can be run as "py -0" to produce a list of the installed pythons,
637 *with default marked with an asterix*. Running "py -0p" will include the paths.
638 If py is run with a version specifier that cannot be matched it will also print
639 the *short form* list of available specifiers.
640 (Contributed by Steve Barnes in :issue:`30362`.)
641
Ned Deily4829bc62016-09-12 17:29:04 -0400642Removed
643=======
644
Serhiy Storchakaff3dbe92016-12-06 19:25:19 +0200645API and Feature Removals
646------------------------
647
Victor Stinner01b5aab2017-10-24 02:02:00 -0700648* The ``os.stat_float_times()`` function has been removed. It was introduced in
649 Python 2.3 for backward compatibility with Python 2.2, and was deprecated
650 since Python 3.1.
651
Serhiy Storchakaff3dbe92016-12-06 19:25:19 +0200652* Unknown escapes consisting of ``'\'`` and an ASCII letter in replacement
Serhiy Storchakab2d61792017-01-13 21:14:40 +0200653 templates for :func:`re.sub` were deprecated in Python 3.5, and will now
654 cause an error.
Ned Deily4829bc62016-09-12 17:29:04 -0400655
Serhiy Storchaka4f76fb12017-01-13 13:25:24 +0200656* Removed support of the *exclude* argument in :meth:`tarfile.TarFile.add`.
Serhiy Storchakab2d61792017-01-13 21:14:40 +0200657 It was deprecated in Python 2.7 and 3.2. Use the *filter* argument instead.
Serhiy Storchaka4f76fb12017-01-13 13:25:24 +0200658
Serhiy Storchaka9ed707e2017-01-13 20:55:05 +0200659* The ``splitunc()`` function in the :mod:`ntpath` module was deprecated in
660 Python 3.1, and has now been removed. Use the :func:`~os.path.splitdrive`
661 function instead.
662
Raymond Hettinger8b57d732017-09-10 10:23:36 -0700663* :func:`collections.namedtuple` no longer supports the *verbose* parameter
664 or ``_source`` attribute which showed the generated source code for the
665 named tuple class. This was part of an optimization designed to speed-up
666 class creation. (Contributed by Jelle Zijlstra with further improvements
667 by INADA Naoki, Serhiy Storchaka, and Raymond Hettinger in :issue:`28638`.)
668
Serhiy Storchaka2e564242017-03-06 17:01:06 +0200669* Functions :func:`bool`, :func:`float`, :func:`list` and :func:`tuple` no
670 longer take keyword arguments. The first argument of :func:`int` can now
Daniel Porteous77f68e32017-06-21 10:21:48 +1000671 be passed only as positional argument.
Serhiy Storchaka2e564242017-03-06 17:01:06 +0200672
Serhiy Storchakaedef3582017-05-15 13:21:31 +0300673* Removed previously deprecated in Python 2.4 classes ``Plist``, ``Dict`` and
674 ``_InternalDict`` in the :mod:`plistlib` module. Dict values in the result
675 of functions :func:`~plistlib.readPlist` and
676 :func:`~plistlib.readPlistFromBytes` are now normal dicts. You no longer
677 can use attribute access to access items of these dictionaries.
678
Ned Deily4829bc62016-09-12 17:29:04 -0400679
680Porting to Python 3.7
681=====================
682
683This section lists previously described changes and other bugfixes
684that may require changes to your code.
685
686
Serhiy Storchaka9165f772017-11-15 08:49:40 +0200687Changes in Python behavior
688--------------------------
689
690* Due to an oversight, earlier Python versions erroneously accepted the
691 following syntax::
692
693 f(1 for x in [1],)
694
Serhiy Storchakaddbce132017-11-15 17:39:37 +0200695 class C(1 for x in [1]):
696 pass
697
Serhiy Storchaka9165f772017-11-15 08:49:40 +0200698 Python 3.7 now correctly raises a :exc:`SyntaxError`, as a generator
699 expression always needs to be directly inside a set of parentheses
Serhiy Storchakaddbce132017-11-15 17:39:37 +0200700 and cannot have a comma on either side, and the duplication of the
701 parentheses can be omitted only on calls.
702 (Contributed by Serhiy Storchaka in :issue:`32012` and :issue:`32023`.)
Serhiy Storchaka9165f772017-11-15 08:49:40 +0200703
704
Serhiy Storchaka009b0a12017-01-13 09:10:51 +0200705Changes in the Python API
706-------------------------
707
Victor Stinnerac577d72017-11-28 21:33:20 +0100708* The ``asyncio.windows_utils.socketpair()`` function has been
709 removed: use directly :func:`socket.socketpair` which is available on all
710 platforms since Python 3.5 (before, it wasn't available on Windows).
711 ``asyncio.windows_utils.socketpair()`` was just an alias to
712 ``socket.socketpair`` on Python 3.5 and newer.
713
Victor Stinner4271dfd2017-11-28 15:19:56 +0100714* :mod:`asyncio`: The module doesn't export :mod:`selectors` and
715 :mod:`_overlapped` modules as ``asyncio.selectors`` and
716 ``asyncio._overlapped``. Replace ``from asyncio import selectors`` with
717 ``import selectors`` for example.
718
Sanyam Khuranab9c3da52017-06-13 22:41:14 +0530719* :meth:`pkgutil.walk_packages` now raises ValueError if *path* is a string.
720 Previously an empty list was returned. (Contributed by Sanyam Khurana in
721 :issue:`24744`.)
722
Serhiy Storchaka009b0a12017-01-13 09:10:51 +0200723* A format string argument for :meth:`string.Formatter.format`
724 is now :ref:`positional-only <positional-only_parameter>`.
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800725 Passing it as a keyword argument was deprecated in Python 3.5. (Contributed
726 by Serhiy Storchaka in :issue:`29193`.)
Serhiy Storchakacc283372017-01-13 09:23:15 +0200727
728* Attributes :attr:`~http.cookies.Morsel.key`,
729 :attr:`~http.cookies.Morsel.value` and
730 :attr:`~http.cookies.Morsel.coded_value` of class
731 :class:`http.cookies.Morsel` are now read-only.
Serhiy Storchakab2d61792017-01-13 21:14:40 +0200732 Assigning to them was deprecated in Python 3.5.
Serhiy Storchakacc283372017-01-13 09:23:15 +0200733 Use the :meth:`~http.cookies.Morsel.set` method for setting them.
734 (Contributed by Serhiy Storchaka in :issue:`29192`.)
INADA Naoki015bce62017-01-16 17:23:30 +0900735
INADA Naokicb41b272017-02-23 00:31:59 +0900736* ``Module``, ``FunctionDef``, ``AsyncFunctionDef``, and
737 ``ClassDef`` AST nodes now have a new ``docstring`` field.
738 The first statement in their body is not considered as a docstring
739 anymore. ``co_firstlineno`` and ``co_lnotab`` of code object for class
Garvit Khatri1cf93a72017-03-28 23:43:38 +0800740 and module are affected by this change. (Contributed by INADA Naoki and
741 Eugene Toder in :issue:`29463`.)
INADA Naoki015bce62017-01-16 17:23:30 +0900742
Serhiy Storchakae304e332017-03-24 13:27:42 +0200743* The *mode* argument of :func:`os.makedirs` no longer affects the file
744 permission bits of newly-created intermediate-level directories.
745 To set their file permission bits you can set the umask before invoking
746 ``makedirs()``.
747 (Contributed by Serhiy Storchaka in :issue:`19930`.)
748
Victor Stinnerf87b85f2017-06-23 15:11:12 +0200749* The :attr:`struct.Struct.format` type is now :class:`str` instead of
750 :class:`bytes`. (Contributed by Victor Stinner in :issue:`21071`.)
751
Segev Finer9f3bdcb2017-06-28 23:51:00 +0300752* Due to internal changes in :mod:`socket` you won't be able to
753 :func:`socket.fromshare` a socket :func:`~socket.socket.share`-ed in older
754 Python versions.
755
Utkarsh Upadhyay8e453182017-07-28 14:42:56 +0200756* ``repr`` for :class:`datetime.timedelta` has changed to include keyword arguments
757 in the output. (Contributed by Utkarsh Upadhyay in :issue:`30302`.)
758
Serhiy Storchakad4d79bc2017-11-04 14:16:35 +0200759* Because :func:`shutil.rmtree` is now implemented using the :func:`os.scandir`
760 function, the user specified handler *onerror* is now called with the first
761 argument ``os.scandir`` instead of ``os.listdir`` when listing the direcory
762 is failed.
763
Serhiy Storchaka05cb7282017-11-16 12:38:26 +0200764* Support of nested sets and set operations in regular expressions as in
765 `Unicode Technical Standard #18`_ might be added in the future. This would
766 change the syntax, so to facilitate this change a :exc:`FutureWarning` will
767 be raised in ambiguous cases for the time being.
768 That include sets starting with a literal ``'['`` or containing literal
769 character sequences ``'--'``, ``'&&'``, ``'~~'``, and ``'||'``. To
770 avoid a warning escape them with a backslash.
771 (Contributed by Serhiy Storchaka in :issue:`30349`.)
772
Serhiy Storchaka70d56fb2017-12-04 14:29:05 +0200773* The result of splitting a string on a :mod:`regular expression <re>`
774 that could match an empty string has been changed. For example
775 splitting on ``r'\s*'`` will now split not only on whitespaces as it
776 did previously, but also between any pair of non-whitespace
777 characters. The previous behavior can be restored by changing the pattern
778 to ``r'\s+'``. A :exc:`FutureWarning` was emitted for such patterns since
779 Python 3.5.
780
781 For patterns that match both empty and non-empty strings, the result of
782 searching for all matches may also be changed in other cases. For example
783 in the string ``'a\n\n'``, the pattern ``r'(?m)^\s*?$'`` will not only
784 match empty strings at positions 2 and 3, but also the string ``'\n'`` at
785 positions 2--3. To match only blank lines, the pattern should be rewritten
786 as ``r'(?m)^[^\S\n]*$'``.
787
788 (Contributed by Serhiy Storchaka in :issue:`25054`.)
789
Jesse-Bakker706e10b2017-11-30 00:05:07 +0100790* :class:`tracemalloc.Traceback` frames are now sorted from oldest to most
791 recent to be more consistent with :mod:`traceback`.
792 (Contributed by Jesse Bakker in :issue:`32121`.)
793
Serhiy Storchaka05cb7282017-11-16 12:38:26 +0200794.. _Unicode Technical Standard #18: https://unicode.org/reports/tr18/
795
Serhiy Storchakae304e332017-03-24 13:27:42 +0200796
Serhiy Storchaka4d3f0842017-10-08 12:53:34 +0300797Changes in the C API
798--------------------
799
800* The function :c:func:`PySlice_GetIndicesEx` is considered not safe for
801 resizable sequences. If the slice indices are not instances of :class:`int`,
802 but objects that implement the :meth:`!__index__` method, the sequence can be
803 resized after passing its length to :c:func:`!PySlice_GetIndicesEx`. This
804 can lead to returning indices out of the length of the sequence. For
805 avoiding possible problems use new functions :c:func:`PySlice_Unpack` and
806 :c:func:`PySlice_AdjustIndices`.
807 (Contributed by Serhiy Storchaka in :issue:`27867`.)
808
809
INADA Naoki015bce62017-01-16 17:23:30 +0900810CPython bytecode changes
811------------------------
812
Martin Panter91a88662017-01-24 00:30:06 +0000813* Added two new opcodes: :opcode:`LOAD_METHOD` and :opcode:`CALL_METHOD`.
INADA Naoki015bce62017-01-16 17:23:30 +0900814 (Contributed by Yury Selivanov and INADA Naoki in :issue:`26110`.)
Julien Palard809d1732017-10-24 11:22:22 +0200815
816
Nick Coghlan1b461312017-11-05 14:58:45 +1000817Other CPython implementation changes
818------------------------------------
819
820* In preparation for potential future changes to the public CPython runtime
821 initialization API (see :pep:`432` for details), CPython's internal startup
822 and configuration management logic has been significantly refactored. While
823 these updates are intended to be entirely transparent to both embedding
824 applications and users of the regular CPython CLI, they're being mentioned
825 here as the refactoring changes the internal order of various operations
826 during interpreter startup, and hence may uncover previously latent defects,
827 either in embedding applications, or in CPython itself.
828 (Contributed by Nick Coghlan and Eric Snow as part of :issue:`22257`.)
829
830
Julien Palard809d1732017-10-24 11:22:22 +0200831Documentation
832=============
833
834.. _whatsnew37-pep545:
835
836PEP 545: Python Documentation Translations
837------------------------------------------
838
839:pep:`545` describes the process to translate Python documentation,
840and two translations have been added:
841
Berker Peksag28ab3ce2017-11-08 16:36:58 +0300842- Japanese: https://docs.python.org/ja/ and associated GitHub
Julien Palard809d1732017-10-24 11:22:22 +0200843 repository: https://github.com/python/python-docs-ja
844
Berker Peksag28ab3ce2017-11-08 16:36:58 +0300845- French: https://docs.python.org/fr/ and associated GitHub
Julien Palard809d1732017-10-24 11:22:22 +0200846 repository: https://github.com/python/python-docs-fr
847
848(Contributed by Julien Palard, Inada Naoki, and Victor Stinner in
Berker Peksag28ab3ce2017-11-08 16:36:58 +0300849:issue:`26546`.)