2015-05-27 23:09:10 -03:00
|
|
|
|
****************************
|
|
|
|
|
What's New In Python 3.6
|
|
|
|
|
****************************
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:Editors: Elvis Pranskevichus <elvis@magic.io>, Yury Selivanov <yury@magic.io>
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
|
|
|
|
.. Rules for maintenance:
|
|
|
|
|
|
|
|
|
|
* Anyone can add text to this document. Do not spend very much time
|
|
|
|
|
on the wording of your changes, because your text will probably
|
|
|
|
|
get rewritten to some degree.
|
|
|
|
|
|
|
|
|
|
* The maintainer will go through Misc/NEWS periodically and add
|
|
|
|
|
changes; it's therefore more important to add your changes to
|
|
|
|
|
Misc/NEWS than to this file.
|
|
|
|
|
|
|
|
|
|
* This is not a complete list of every single change; completeness
|
|
|
|
|
is the purpose of Misc/NEWS. Some changes I consider too small
|
|
|
|
|
or esoteric to include. If such a change is added to the text,
|
|
|
|
|
I'll just remove it. (This is another reason you shouldn't spend
|
|
|
|
|
too much time on writing your addition.)
|
|
|
|
|
|
|
|
|
|
* If you want to draw your new text to the attention of the
|
|
|
|
|
maintainer, add 'XXX' to the beginning of the paragraph or
|
|
|
|
|
section.
|
|
|
|
|
|
|
|
|
|
* It's OK to just add a fragmentary note about a change. For
|
|
|
|
|
example: "XXX Describe the transmogrify() function added to the
|
|
|
|
|
socket module." The maintainer will research the change and
|
|
|
|
|
write the necessary text.
|
|
|
|
|
|
|
|
|
|
* You can comment out your additions if you like, but it's not
|
|
|
|
|
necessary (especially when a final release is some months away).
|
|
|
|
|
|
|
|
|
|
* Credit the author of a patch or bugfix. Just the name is
|
|
|
|
|
sufficient; the e-mail address isn't necessary.
|
|
|
|
|
|
|
|
|
|
* It's helpful to add the bug/patch number as a comment:
|
|
|
|
|
|
|
|
|
|
XXX Describe the transmogrify() function added to the socket
|
|
|
|
|
module.
|
|
|
|
|
(Contributed by P.Y. Developer in :issue:`12345`.)
|
|
|
|
|
|
|
|
|
|
This saves the maintainer the effort of going through the Mercurial log
|
|
|
|
|
when researching a change.
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
This article explains the new features in Python 3.6, compared to 3.5.
|
2016-12-22 19:38:47 -04:00
|
|
|
|
Python 3.6 was released on December 23, 2016. See the
|
|
|
|
|
`changelog <https://docs.python.org/3.6/whatsnew/changelog.html>`_ for a full
|
|
|
|
|
list of changes.
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
|
|
|
|
.. seealso::
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:pep:`494` - Python 3.6 Release Schedule
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Summary -- Release highlights
|
|
|
|
|
=============================
|
|
|
|
|
|
2016-05-22 08:28:41 -03:00
|
|
|
|
New syntax features:
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
* :ref:`PEP 498 <whatsnew36-pep498>`, formatted string literals.
|
|
|
|
|
|
|
|
|
|
* :ref:`PEP 515 <whatsnew36-pep515>`, underscores in numeric literals.
|
|
|
|
|
|
|
|
|
|
* :ref:`PEP 526 <whatsnew36-pep526>`, syntax for variable annotations.
|
|
|
|
|
|
|
|
|
|
* :ref:`PEP 525 <whatsnew36-pep525>`, asynchronous generators.
|
|
|
|
|
|
|
|
|
|
* :ref:`PEP 530 <whatsnew36-pep530>`: asynchronous comprehensions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
New library modules:
|
|
|
|
|
|
|
|
|
|
* :mod:`secrets`: :ref:`PEP 506 -- Adding A Secrets Module To The Standard Library <whatsnew36-pep506>`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CPython implementation improvements:
|
|
|
|
|
|
|
|
|
|
* The :ref:`dict <typesmapping>` type has been reimplemented to use
|
2016-12-15 11:20:53 -04:00
|
|
|
|
a :ref:`more compact representation <whatsnew36-compactdict>`
|
2016-12-30 02:49:20 -04:00
|
|
|
|
based on `a proposal by Raymond Hettinger
|
|
|
|
|
<https://mail.python.org/pipermail/python-dev/2012-December/123028.html>`_
|
|
|
|
|
and similar to the `PyPy dict implementation`_. This resulted in dictionaries
|
2016-11-07 17:40:20 -04:00
|
|
|
|
using 20% to 25% less memory when compared to Python 3.5.
|
|
|
|
|
|
|
|
|
|
* Customization of class creation has been simplified with the
|
|
|
|
|
:ref:`new protocol <whatsnew36-pep487>`.
|
|
|
|
|
|
2016-11-10 16:39:27 -04:00
|
|
|
|
* The class attribute definition order is
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:ref:`now preserved <whatsnew36-pep520>`.
|
2016-09-09 13:59:34 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The order of elements in ``**kwargs`` now
|
|
|
|
|
:ref:`corresponds to the order <whatsnew36-pep468>` in which keyword
|
|
|
|
|
arguments were passed to the function.
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* DTrace and SystemTap :ref:`probing support <whatsnew36-tracing>` has
|
|
|
|
|
been added.
|
|
|
|
|
|
|
|
|
|
* The new :ref:`PYTHONMALLOC <whatsnew36-pythonmalloc>` environment variable
|
|
|
|
|
can now be used to debug the interpreter memory allocation and access
|
|
|
|
|
errors.
|
2016-09-09 13:59:34 -03:00
|
|
|
|
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
Significant improvements in the standard library:
|
2016-09-09 13:59:34 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The :mod:`asyncio` module has received new features, significant
|
|
|
|
|
usability and performance improvements, and a fair amount of bug fixes.
|
|
|
|
|
Starting with Python 3.6 the ``asyncio`` module is no longer provisional
|
|
|
|
|
and its API is considered stable.
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
* A new :ref:`file system path protocol <whatsnew36-pep519>` has been
|
|
|
|
|
implemented to support :term:`path-like objects <path-like object>`.
|
|
|
|
|
All standard library functions operating on paths have been updated to
|
|
|
|
|
work with the new protocol.
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The :mod:`datetime` module has gained support for
|
|
|
|
|
:ref:`Local Time Disambiguation <whatsnew36-pep495>`.
|
|
|
|
|
|
|
|
|
|
* The :mod:`typing` module received a number of
|
2017-01-20 11:13:23 -04:00
|
|
|
|
:ref:`improvements <whatsnew36-typing>`.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
|
|
|
|
* The :mod:`tracemalloc` module has been significantly reworked
|
2016-11-10 16:39:27 -04:00
|
|
|
|
and is now used to provide better output for :exc:`ResourceWarning`
|
2016-11-10 14:27:22 -04:00
|
|
|
|
as well as provide better diagnostics for memory allocation errors.
|
|
|
|
|
See the :ref:`PYTHONMALLOC section <whatsnew36-pythonmalloc>` for more
|
|
|
|
|
information.
|
2016-09-09 13:59:34 -03:00
|
|
|
|
|
2016-08-26 18:45:15 -03:00
|
|
|
|
|
2016-09-06 20:33:52 -03:00
|
|
|
|
Security improvements:
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The new :mod:`secrets` module has been added to simplify the generation of
|
|
|
|
|
cryptographically strong pseudo-random numbers suitable for
|
|
|
|
|
managing secrets such as account authentication, tokens, and similar.
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
* On Linux, :func:`os.urandom` now blocks until the system urandom entropy
|
|
|
|
|
pool is initialized to increase the security. See the :pep:`524` for the
|
2016-09-06 20:33:52 -03:00
|
|
|
|
rationale.
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
* The :mod:`hashlib` and :mod:`ssl` modules now support OpenSSL 1.1.0.
|
2016-09-11 20:14:35 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
* The default settings and feature set of the :mod:`ssl` module have been
|
|
|
|
|
improved.
|
2016-09-11 20:14:35 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
* The :mod:`hashlib` module received support for the BLAKE2, SHA-3 and SHAKE
|
|
|
|
|
hash algorithms and the :func:`~hashlib.scrypt` key derivation function.
|
2016-09-11 20:14:35 -03:00
|
|
|
|
|
2016-05-22 08:28:41 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
Windows improvements:
|
2016-09-08 14:35:16 -03:00
|
|
|
|
|
2018-05-30 19:52:43 -03:00
|
|
|
|
* :ref:`PEP 528 <whatsnew36-pep528>` and :ref:`PEP 529 <whatsnew36-pep529>`,
|
2016-11-07 17:40:20 -04:00
|
|
|
|
Windows filesystem and console encoding changed to UTF-8.
|
2016-08-31 01:22:36 -03:00
|
|
|
|
|
2016-05-22 08:28:41 -03:00
|
|
|
|
* The ``py.exe`` launcher, when used interactively, no longer prefers
|
|
|
|
|
Python 2 over Python 3 when the user doesn't specify a version (via
|
|
|
|
|
command line arguments or a config file). Handling of shebang lines
|
|
|
|
|
remains unchanged - "python" refers to Python 2 in that case.
|
|
|
|
|
|
2016-09-07 00:40:11 -03:00
|
|
|
|
* ``python.exe`` and ``pythonw.exe`` have been marked as long-path aware,
|
2016-11-28 02:19:07 -04:00
|
|
|
|
which means that the 260 character path limit may no longer apply.
|
2016-09-07 00:40:11 -03:00
|
|
|
|
See :ref:`removing the MAX_PATH limitation <max-path>` for details.
|
|
|
|
|
|
2016-09-17 16:54:06 -03:00
|
|
|
|
* A ``._pth`` file can be added to force isolated mode and fully specify
|
2016-09-09 19:22:13 -03:00
|
|
|
|
all search paths to avoid registry and environment lookup. See
|
2022-03-23 14:29:40 -03:00
|
|
|
|
:ref:`the documentation <windows_finding_modules>` for more information.
|
2016-09-09 19:09:30 -03:00
|
|
|
|
|
2016-09-09 19:22:13 -03:00
|
|
|
|
* A ``python36.zip`` file now works as a landmark to infer
|
2022-03-23 14:29:40 -03:00
|
|
|
|
:envvar:`PYTHONHOME`. See :ref:`the documentation <windows_finding_modules>` for
|
2016-09-09 19:22:13 -03:00
|
|
|
|
more information.
|
2016-09-09 19:09:30 -03:00
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. _PyPy dict implementation: https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
New Features
|
|
|
|
|
============
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. _whatsnew36-pep498:
|
2016-09-13 12:33:03 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
PEP 498: Formatted string literals
|
|
|
|
|
----------------------------------
|
2016-09-09 15:22:14 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:pep:`498` introduces a new kind of string literals: *f-strings*, or
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:ref:`formatted string literals <f-strings>`.
|
2016-09-09 15:22:14 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
Formatted string literals are prefixed with ``'f'`` and are similar to
|
|
|
|
|
the format strings accepted by :meth:`str.format`. They contain replacement
|
|
|
|
|
fields surrounded by curly braces. The replacement fields are expressions,
|
|
|
|
|
which are evaluated at run time, and then formatted using the
|
|
|
|
|
:func:`format` protocol::
|
2016-09-16 16:46:55 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
>>> name = "Fred"
|
|
|
|
|
>>> f"He said his name is {name}."
|
|
|
|
|
'He said his name is Fred.'
|
2016-11-10 14:27:22 -04:00
|
|
|
|
>>> width = 10
|
|
|
|
|
>>> precision = 4
|
|
|
|
|
>>> value = decimal.Decimal("12.34567")
|
|
|
|
|
>>> f"result: {value:{width}.{precision}}" # nested fields
|
|
|
|
|
'result: 12.35'
|
2016-09-16 16:46:55 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`498` -- Literal String Interpolation.
|
|
|
|
|
PEP written and implemented by Eric V. Smith.
|
|
|
|
|
|
|
|
|
|
:ref:`Feature documentation <f-strings>`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep526:
|
|
|
|
|
|
|
|
|
|
PEP 526: Syntax for variable annotations
|
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
|
|
:pep:`484` introduced the standard for type annotations of function
|
|
|
|
|
parameters, a.k.a. type hints. This PEP adds syntax to Python for annotating
|
|
|
|
|
the types of variables including class variables and instance variables::
|
|
|
|
|
|
|
|
|
|
primes: List[int] = []
|
|
|
|
|
|
|
|
|
|
captain: str # Note: no initial value!
|
|
|
|
|
|
|
|
|
|
class Starship:
|
|
|
|
|
stats: Dict[str, int] = {}
|
|
|
|
|
|
|
|
|
|
Just as for function annotations, the Python interpreter does not attach any
|
|
|
|
|
particular meaning to variable annotations and only stores them in the
|
|
|
|
|
``__annotations__`` attribute of a class or module.
|
|
|
|
|
|
|
|
|
|
In contrast to variable declarations in statically typed languages,
|
|
|
|
|
the goal of annotation syntax is to provide an easy way to specify structured
|
|
|
|
|
type metadata for third party tools and libraries via the abstract syntax tree
|
|
|
|
|
and the ``__annotations__`` attribute.
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`526` -- Syntax for variable annotations.
|
|
|
|
|
PEP written by Ryan Gonzalez, Philip House, Ivan Levkivskyi, Lisa Roach,
|
|
|
|
|
and Guido van Rossum. Implemented by Ivan Levkivskyi.
|
|
|
|
|
|
|
|
|
|
Tools that use or will use the new syntax:
|
2017-12-06 12:39:33 -04:00
|
|
|
|
`mypy <http://www.mypy-lang.org/>`_,
|
|
|
|
|
`pytype <https://github.com/google/pytype>`_, PyCharm, etc.
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-03-14 08:04:26 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. _whatsnew36-pep515:
|
2016-09-09 18:57:09 -03:00
|
|
|
|
|
|
|
|
|
PEP 515: Underscores in Numeric Literals
|
2016-10-08 10:15:15 -03:00
|
|
|
|
----------------------------------------
|
2016-09-09 18:57:09 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:pep:`515` adds the ability to use underscores in numeric literals for
|
|
|
|
|
improved readability. For example::
|
|
|
|
|
|
|
|
|
|
>>> 1_000_000_000_000_000
|
|
|
|
|
1000000000000000
|
|
|
|
|
>>> 0x_FF_FF_FF_FF
|
|
|
|
|
4294967295
|
2016-09-09 18:57:09 -03:00
|
|
|
|
|
|
|
|
|
Single underscores are allowed between digits and after any base
|
2016-11-07 17:40:20 -04:00
|
|
|
|
specifier. Leading, trailing, or multiple underscores in a row are not
|
|
|
|
|
allowed.
|
2016-09-09 18:57:09 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :ref:`string formatting <formatspec>` language also now has support
|
|
|
|
|
for the ``'_'`` option to signal the use of an underscore for a thousands
|
|
|
|
|
separator for floating point presentation types and for integer
|
|
|
|
|
presentation type ``'d'``. For integer presentation types ``'b'``,
|
|
|
|
|
``'o'``, ``'x'``, and ``'X'``, underscores will be inserted every 4
|
|
|
|
|
digits::
|
|
|
|
|
|
|
|
|
|
>>> '{:_}'.format(1000000)
|
|
|
|
|
'1_000_000'
|
|
|
|
|
>>> '{:_x}'.format(0xFFFFFFFF)
|
|
|
|
|
'ffff_ffff'
|
|
|
|
|
|
2016-09-09 18:57:09 -03:00
|
|
|
|
.. seealso::
|
|
|
|
|
|
2016-09-16 16:46:55 -03:00
|
|
|
|
:pep:`515` -- Underscores in Numeric Literals
|
2016-09-12 23:52:32 -03:00
|
|
|
|
PEP written by Georg Brandl and Serhiy Storchaka.
|
2016-09-09 18:57:09 -03:00
|
|
|
|
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. _whatsnew36-pep525:
|
2016-09-05 19:33:46 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
PEP 525: Asynchronous Generators
|
|
|
|
|
--------------------------------
|
2016-09-05 19:33:46 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:pep:`492` introduced support for native coroutines and ``async`` / ``await``
|
|
|
|
|
syntax to Python 3.5. A notable limitation of the Python 3.5 implementation
|
|
|
|
|
is that it was not possible to use ``await`` and ``yield`` in the same
|
|
|
|
|
function body. In Python 3.6 this restriction has been lifted, making it
|
|
|
|
|
possible to define *asynchronous generators*::
|
2016-09-05 19:33:46 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
async def ticker(delay, to):
|
2016-11-14 15:49:18 -04:00
|
|
|
|
"""Yield numbers from 0 to *to* every *delay* seconds."""
|
2016-11-07 17:40:20 -04:00
|
|
|
|
for i in range(to):
|
|
|
|
|
yield i
|
|
|
|
|
await asyncio.sleep(delay)
|
2016-09-05 19:33:46 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
The new syntax allows for faster and more concise code.
|
2016-09-05 19:33:46 -03:00
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:pep:`525` -- Asynchronous Generators
|
|
|
|
|
PEP written and implemented by Yury Selivanov.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep530:
|
2016-09-05 19:33:46 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
PEP 530: Asynchronous Comprehensions
|
|
|
|
|
------------------------------------
|
|
|
|
|
|
|
|
|
|
:pep:`530` adds support for using ``async for`` in list, set, dict
|
|
|
|
|
comprehensions and generator expressions::
|
|
|
|
|
|
|
|
|
|
result = [i async for i in aiter() if i % 2]
|
|
|
|
|
|
|
|
|
|
Additionally, ``await`` expressions are supported in all kinds
|
|
|
|
|
of comprehensions::
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
result = [await fun() for fun in funcs if await condition()]
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`530` -- Asynchronous Comprehensions
|
|
|
|
|
PEP written and implemented by Yury Selivanov.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep487:
|
|
|
|
|
|
|
|
|
|
PEP 487: Simpler customization of class creation
|
|
|
|
|
------------------------------------------------
|
|
|
|
|
|
|
|
|
|
It is now possible to customize subclass creation without using a metaclass.
|
|
|
|
|
The new ``__init_subclass__`` classmethod will be called on the base class
|
|
|
|
|
whenever a new subclass is created::
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
class PluginBase:
|
|
|
|
|
subclasses = []
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
def __init_subclass__(cls, **kwargs):
|
|
|
|
|
super().__init_subclass__(**kwargs)
|
|
|
|
|
cls.subclasses.append(cls)
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
class Plugin1(PluginBase):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
class Plugin2(PluginBase):
|
|
|
|
|
pass
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-12-05 02:47:55 -04:00
|
|
|
|
In order to allow zero-argument :func:`super` calls to work correctly from
|
|
|
|
|
:meth:`~object.__init_subclass__` implementations, custom metaclasses must
|
|
|
|
|
ensure that the new ``__classcell__`` namespace entry is propagated to
|
|
|
|
|
``type.__new__`` (as described in :ref:`class-object-creation`).
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. seealso::
|
2016-09-05 19:33:46 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
:pep:`487` -- Simpler customization of class creation
|
|
|
|
|
PEP written and implemented by Martin Teichmann.
|
|
|
|
|
|
|
|
|
|
:ref:`Feature documentation <class-customization>`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep487-descriptors:
|
|
|
|
|
|
|
|
|
|
PEP 487: Descriptor Protocol Enhancements
|
|
|
|
|
-----------------------------------------
|
|
|
|
|
|
2016-12-17 21:26:53 -04:00
|
|
|
|
:pep:`487` extends the descriptor protocol to include the new optional
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:meth:`~object.__set_name__` method. Whenever a new class is defined, the new
|
|
|
|
|
method will be called on all descriptors included in the definition, providing
|
2016-11-07 17:40:20 -04:00
|
|
|
|
them with a reference to the class being defined and the name given to the
|
2016-11-10 14:27:22 -04:00
|
|
|
|
descriptor within the class namespace. In other words, instances of
|
|
|
|
|
descriptors can now know the attribute name of the descriptor in the
|
|
|
|
|
owner class::
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
class IntField:
|
|
|
|
|
def __get__(self, instance, owner):
|
|
|
|
|
return instance.__dict__[self.name]
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
def __set__(self, instance, value):
|
|
|
|
|
if not isinstance(value, int):
|
|
|
|
|
raise ValueError(f'expecting integer in {self.name}')
|
|
|
|
|
instance.__dict__[self.name] = value
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
# this is the new initializer:
|
|
|
|
|
def __set_name__(self, owner, name):
|
|
|
|
|
self.name = name
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
class Model:
|
|
|
|
|
int_field = IntField()
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:pep:`487` -- Simpler customization of class creation
|
|
|
|
|
PEP written and implemented by Martin Teichmann.
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:ref:`Feature documentation <descriptors>`
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep519:
|
2016-08-26 18:45:15 -03:00
|
|
|
|
|
|
|
|
|
PEP 519: Adding a file system path protocol
|
2016-09-12 23:52:32 -03:00
|
|
|
|
-------------------------------------------
|
2016-08-26 18:45:15 -03:00
|
|
|
|
|
|
|
|
|
File system paths have historically been represented as :class:`str`
|
|
|
|
|
or :class:`bytes` objects. This has led to people who write code which
|
|
|
|
|
operate on file system paths to assume that such objects are only one
|
|
|
|
|
of those two types (an :class:`int` representing a file descriptor
|
|
|
|
|
does not count as that is not a file path). Unfortunately that
|
|
|
|
|
assumption prevents alternative object representations of file system
|
|
|
|
|
paths like :mod:`pathlib` from working with pre-existing code,
|
|
|
|
|
including Python's standard library.
|
|
|
|
|
|
|
|
|
|
To fix this situation, a new interface represented by
|
|
|
|
|
:class:`os.PathLike` has been defined. By implementing the
|
|
|
|
|
:meth:`~os.PathLike.__fspath__` method, an object signals that it
|
|
|
|
|
represents a path. An object can then provide a low-level
|
|
|
|
|
representation of a file system path as a :class:`str` or
|
|
|
|
|
:class:`bytes` object. This means an object is considered
|
|
|
|
|
:term:`path-like <path-like object>` if it implements
|
|
|
|
|
:class:`os.PathLike` or is a :class:`str` or :class:`bytes` object
|
|
|
|
|
which represents a file system path. Code can use :func:`os.fspath`,
|
|
|
|
|
:func:`os.fsdecode`, or :func:`os.fsencode` to explicitly get a
|
|
|
|
|
:class:`str` and/or :class:`bytes` representation of a path-like
|
|
|
|
|
object.
|
|
|
|
|
|
|
|
|
|
The built-in :func:`open` function has been updated to accept
|
2016-11-21 09:38:59 -04:00
|
|
|
|
:class:`os.PathLike` objects, as have all relevant functions in the
|
|
|
|
|
:mod:`os` and :mod:`os.path` modules, and most other functions and
|
2016-11-10 14:27:22 -04:00
|
|
|
|
classes in the standard library. The :class:`os.DirEntry` class
|
2016-08-26 18:45:15 -03:00
|
|
|
|
and relevant classes in :mod:`pathlib` have also been updated to
|
2016-09-06 23:36:01 -03:00
|
|
|
|
implement :class:`os.PathLike`.
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
The hope is that updating the fundamental functions for operating
|
2016-09-06 23:36:01 -03:00
|
|
|
|
on file system paths will lead to third-party code to implicitly
|
|
|
|
|
support all :term:`path-like objects <path-like object>` without any
|
2016-11-21 09:38:59 -04:00
|
|
|
|
code changes, or at least very minimal ones (e.g. calling
|
2016-09-06 23:36:01 -03:00
|
|
|
|
:func:`os.fspath` at the beginning of code before operating on a
|
|
|
|
|
path-like object).
|
2016-08-26 18:45:15 -03:00
|
|
|
|
|
|
|
|
|
Here are some examples of how the new interface allows for
|
|
|
|
|
:class:`pathlib.Path` to be used more easily and transparently with
|
|
|
|
|
pre-existing code::
|
|
|
|
|
|
|
|
|
|
>>> import pathlib
|
|
|
|
|
>>> with open(pathlib.Path("README")) as f:
|
|
|
|
|
... contents = f.read()
|
|
|
|
|
...
|
|
|
|
|
>>> import os.path
|
|
|
|
|
>>> os.path.splitext(pathlib.Path("some_file.txt"))
|
|
|
|
|
('some_file', '.txt')
|
|
|
|
|
>>> os.path.join("/a/b", pathlib.Path("c"))
|
|
|
|
|
'/a/b/c'
|
|
|
|
|
>>> import os
|
|
|
|
|
>>> os.fspath(pathlib.Path("some_file.txt"))
|
|
|
|
|
'some_file.txt'
|
|
|
|
|
|
|
|
|
|
(Implemented by Brett Cannon, Ethan Furman, Dusty Phillips, and Jelle Zijlstra.)
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
2016-09-12 23:52:32 -03:00
|
|
|
|
:pep:`519` -- Adding a file system path protocol
|
2016-08-26 18:45:15 -03:00
|
|
|
|
PEP written by Brett Cannon and Koos Zevenhoven.
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
.. _whatsnew36-pep495:
|
|
|
|
|
|
|
|
|
|
PEP 495: Local Time Disambiguation
|
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
|
|
In most world locations, there have been and will be times when local clocks
|
|
|
|
|
are moved back. In those times, intervals are introduced in which local
|
|
|
|
|
clocks show the same time twice in the same day. In these situations, the
|
|
|
|
|
information displayed on a local clock (or stored in a Python datetime
|
|
|
|
|
instance) is insufficient to identify a particular moment in time.
|
|
|
|
|
|
|
|
|
|
:pep:`495` adds the new *fold* attribute to instances of
|
|
|
|
|
:class:`datetime.datetime` and :class:`datetime.time` classes to differentiate
|
|
|
|
|
between two moments in time for which local times are the same::
|
|
|
|
|
|
|
|
|
|
>>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
|
|
|
|
|
>>> for i in range(4):
|
|
|
|
|
... u = u0 + i*HOUR
|
|
|
|
|
... t = u.astimezone(Eastern)
|
|
|
|
|
... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
|
|
|
|
|
...
|
|
|
|
|
04:00:00 UTC = 00:00:00 EDT 0
|
|
|
|
|
05:00:00 UTC = 01:00:00 EDT 0
|
|
|
|
|
06:00:00 UTC = 01:00:00 EST 1
|
|
|
|
|
07:00:00 UTC = 02:00:00 EST 0
|
|
|
|
|
|
|
|
|
|
The values of the :attr:`fold <datetime.datetime.fold>` attribute have the
|
2016-11-14 15:49:18 -04:00
|
|
|
|
value ``0`` for all instances except those that represent the second
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(chronologically) moment in time in an ambiguous case.
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`495` -- Local Time Disambiguation
|
|
|
|
|
PEP written by Alexander Belopolsky and Tim Peters, implementation
|
|
|
|
|
by Alexander Belopolsky.
|
|
|
|
|
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. _whatsnew36-pep529:
|
2016-09-08 14:35:16 -03:00
|
|
|
|
|
|
|
|
|
PEP 529: Change Windows filesystem encoding to UTF-8
|
2016-09-12 23:52:32 -03:00
|
|
|
|
----------------------------------------------------
|
2016-09-08 14:35:16 -03:00
|
|
|
|
|
|
|
|
|
Representing filesystem paths is best performed with str (Unicode) rather than
|
|
|
|
|
bytes. However, there are some situations where using bytes is sufficient and
|
|
|
|
|
correct.
|
|
|
|
|
|
|
|
|
|
Prior to Python 3.6, data loss could result when using bytes paths on Windows.
|
|
|
|
|
With this change, using bytes to represent paths is now supported on Windows,
|
|
|
|
|
provided those bytes are encoded with the encoding returned by
|
|
|
|
|
:func:`sys.getfilesystemencoding()`, which now defaults to ``'utf-8'``.
|
|
|
|
|
|
|
|
|
|
Applications that do not use str to represent paths should use
|
|
|
|
|
:func:`os.fsencode()` and :func:`os.fsdecode()` to ensure their bytes are
|
|
|
|
|
correctly encoded. To revert to the previous behaviour, set
|
|
|
|
|
:envvar:`PYTHONLEGACYWINDOWSFSENCODING` or call
|
|
|
|
|
:func:`sys._enablelegacywindowsfsencoding`.
|
|
|
|
|
|
|
|
|
|
See :pep:`529` for more information and discussion of code modifications that
|
|
|
|
|
may be required.
|
|
|
|
|
|
2016-07-30 03:26:03 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. _whatsnew36-pep528:
|
2016-08-31 01:22:36 -03:00
|
|
|
|
|
|
|
|
|
PEP 528: Change Windows console encoding to UTF-8
|
|
|
|
|
-------------------------------------------------
|
|
|
|
|
|
|
|
|
|
The default console on Windows will now accept all Unicode characters and
|
|
|
|
|
provide correctly read str objects to Python code. ``sys.stdin``,
|
|
|
|
|
``sys.stdout`` and ``sys.stderr`` now default to utf-8 encoding.
|
|
|
|
|
|
|
|
|
|
This change only applies when using an interactive console, and not when
|
|
|
|
|
redirecting files or pipes. To revert to the previous behaviour for interactive
|
2017-05-16 06:36:45 -03:00
|
|
|
|
console use, set :envvar:`PYTHONLEGACYWINDOWSSTDIO`.
|
2016-08-31 01:22:36 -03:00
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`528` -- Change Windows console encoding to UTF-8
|
|
|
|
|
PEP written and implemented by Steve Dower.
|
2016-07-30 03:26:03 -03:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep520:
|
|
|
|
|
|
|
|
|
|
PEP 520: Preserving Class Attribute Definition Order
|
|
|
|
|
----------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Attributes in a class definition body have a natural ordering: the same
|
|
|
|
|
order in which the names appear in the source. This order is now
|
2016-11-10 14:27:22 -04:00
|
|
|
|
preserved in the new class's :attr:`~object.__dict__` attribute.
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
|
|
|
|
Also, the effective default class *execution* namespace (returned from
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:ref:`type.__prepare__() <prepare>`) is now an insertion-order-preserving
|
|
|
|
|
mapping.
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`520` -- Preserving Class Attribute Definition Order
|
|
|
|
|
PEP written and implemented by Eric Snow.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep468:
|
|
|
|
|
|
|
|
|
|
PEP 468: Preserving Keyword Argument Order
|
|
|
|
|
------------------------------------------
|
|
|
|
|
|
|
|
|
|
``**kwargs`` in a function signature is now guaranteed to be an
|
|
|
|
|
insertion-order-preserving mapping.
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`468` -- Preserving Keyword Argument Order
|
|
|
|
|
PEP written and implemented by Eric Snow.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-compactdict:
|
|
|
|
|
|
|
|
|
|
New :ref:`dict <typesmapping>` implementation
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
|
|
|
|
|
The :ref:`dict <typesmapping>` type now uses a "compact" representation
|
2016-12-30 02:49:20 -04:00
|
|
|
|
based on `a proposal by Raymond Hettinger
|
|
|
|
|
<https://mail.python.org/pipermail/python-dev/2012-December/123028.html>`_
|
|
|
|
|
which was `first implemented by PyPy
|
|
|
|
|
<https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html>`_.
|
2016-11-07 17:40:20 -04:00
|
|
|
|
The memory usage of the new :func:`dict` is between 20% and 25% smaller
|
|
|
|
|
compared to Python 3.5.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
|
|
|
|
The order-preserving aspect of this new implementation is considered an
|
|
|
|
|
implementation detail and should not be relied upon (this may change in
|
|
|
|
|
the future, but it is desired to have this new dict implementation in
|
|
|
|
|
the language for a few releases before changing the language spec to mandate
|
2016-11-07 17:40:20 -04:00
|
|
|
|
order-preserving semantics for all current and future Python
|
|
|
|
|
implementations; this also helps preserve backwards-compatibility
|
|
|
|
|
with older versions of the language where random iteration order is
|
|
|
|
|
still in effect, e.g. Python 3.5).
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
(Contributed by INADA Naoki in :issue:`27350`. Idea
|
|
|
|
|
`originally suggested by Raymond Hettinger
|
|
|
|
|
<https://mail.python.org/pipermail/python-dev/2012-December/123028.html>`_.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-pep523:
|
|
|
|
|
|
|
|
|
|
PEP 523: Adding a frame evaluation API to CPython
|
|
|
|
|
-------------------------------------------------
|
|
|
|
|
|
|
|
|
|
While Python provides extensive support to customize how code
|
|
|
|
|
executes, one place it has not done so is in the evaluation of frame
|
2016-11-10 14:27:22 -04:00
|
|
|
|
objects. If you wanted some way to intercept frame evaluation in
|
2016-11-07 17:40:20 -04:00
|
|
|
|
Python there really wasn't any way without directly manipulating
|
|
|
|
|
function pointers for defined functions.
|
|
|
|
|
|
|
|
|
|
:pep:`523` changes this by providing an API to make frame
|
|
|
|
|
evaluation pluggable at the C level. This will allow for tools such
|
|
|
|
|
as debuggers and JITs to intercept frame evaluation before the
|
|
|
|
|
execution of Python code begins. This enables the use of alternative
|
|
|
|
|
evaluation implementations for Python code, tracking frame
|
|
|
|
|
evaluation, etc.
|
|
|
|
|
|
|
|
|
|
This API is not part of the limited C API and is marked as private to
|
|
|
|
|
signal that usage of this API is expected to be limited and only
|
|
|
|
|
applicable to very select, low-level use-cases. Semantics of the
|
|
|
|
|
API will change with Python as necessary.
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`523` -- Adding a frame evaluation API to CPython
|
|
|
|
|
PEP written by Brett Cannon and Dino Viehland.
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
.. _whatsnew36-pythonmalloc:
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2016-03-14 08:04:26 -03:00
|
|
|
|
PYTHONMALLOC environment variable
|
2016-09-12 23:52:32 -03:00
|
|
|
|
---------------------------------
|
2016-03-14 08:04:26 -03:00
|
|
|
|
|
2016-06-20 05:00:45 -03:00
|
|
|
|
The new :envvar:`PYTHONMALLOC` environment variable allows setting the Python
|
2016-11-21 09:38:59 -04:00
|
|
|
|
memory allocators and installing debug hooks.
|
2016-03-14 08:04:26 -03:00
|
|
|
|
|
|
|
|
|
It is now possible to install debug hooks on Python memory allocators on Python
|
|
|
|
|
compiled in release mode using ``PYTHONMALLOC=debug``. Effects of debug hooks:
|
|
|
|
|
|
|
|
|
|
* Newly allocated memory is filled with the byte ``0xCB``
|
|
|
|
|
* Freed memory is filled with the byte ``0xDB``
|
2016-11-21 09:38:59 -04:00
|
|
|
|
* Detect violations of the Python memory allocator API. For example,
|
2016-03-14 08:04:26 -03:00
|
|
|
|
:c:func:`PyObject_Free` called on a memory block allocated by
|
|
|
|
|
:c:func:`PyMem_Malloc`.
|
2016-11-21 09:38:59 -04:00
|
|
|
|
* Detect writes before the start of a buffer (buffer underflows)
|
|
|
|
|
* Detect writes after the end of a buffer (buffer overflows)
|
2016-03-14 18:26:53 -03:00
|
|
|
|
* Check that the :term:`GIL <global interpreter lock>` is held when allocator
|
2016-03-18 07:04:31 -03:00
|
|
|
|
functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and
|
|
|
|
|
:c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called.
|
|
|
|
|
|
2016-03-18 11:10:43 -03:00
|
|
|
|
Checking if the GIL is held is also a new feature of Python 3.6.
|
2016-03-14 08:04:26 -03:00
|
|
|
|
|
|
|
|
|
See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python
|
|
|
|
|
memory allocators.
|
|
|
|
|
|
|
|
|
|
It is now also possible to force the usage of the :c:func:`malloc` allocator of
|
|
|
|
|
the C library for all Python memory allocations using ``PYTHONMALLOC=malloc``.
|
2016-11-21 09:38:59 -04:00
|
|
|
|
This is helpful when using external memory debuggers like Valgrind on
|
|
|
|
|
a Python compiled in release mode.
|
2016-03-14 08:04:26 -03:00
|
|
|
|
|
2016-03-15 18:22:13 -03:00
|
|
|
|
On error, the debug hooks on Python memory allocators now use the
|
|
|
|
|
:mod:`tracemalloc` module to get the traceback where a memory block was
|
|
|
|
|
allocated.
|
|
|
|
|
|
|
|
|
|
Example of fatal error on buffer overflow using
|
|
|
|
|
``python3.6 -X tracemalloc=5`` (store 5 frames in traces)::
|
|
|
|
|
|
|
|
|
|
Debug memory block at address p=0x7fbcd41666f8: API 'o'
|
|
|
|
|
4 bytes originally requested
|
|
|
|
|
The 7 pad bytes at p-7 are FORBIDDENBYTE, as expected.
|
|
|
|
|
The 8 pad bytes at tail=0x7fbcd41666fc are not all FORBIDDENBYTE (0xfb):
|
|
|
|
|
at tail+0: 0x02 *** OUCH
|
|
|
|
|
at tail+1: 0xfb
|
|
|
|
|
at tail+2: 0xfb
|
|
|
|
|
at tail+3: 0xfb
|
|
|
|
|
at tail+4: 0xfb
|
|
|
|
|
at tail+5: 0xfb
|
|
|
|
|
at tail+6: 0xfb
|
|
|
|
|
at tail+7: 0xfb
|
|
|
|
|
The block was made by call #1233329 to debug malloc/realloc.
|
|
|
|
|
Data at p: 1a 2b 30 00
|
|
|
|
|
|
|
|
|
|
Memory block allocated at (most recent call first):
|
|
|
|
|
File "test/test_bytes.py", line 323
|
|
|
|
|
File "unittest/case.py", line 600
|
|
|
|
|
File "unittest/case.py", line 648
|
|
|
|
|
File "unittest/suite.py", line 122
|
|
|
|
|
File "unittest/suite.py", line 84
|
|
|
|
|
|
|
|
|
|
Fatal Python error: bad trailing pad byte
|
|
|
|
|
|
|
|
|
|
Current thread 0x00007fbcdbd32700 (most recent call first):
|
|
|
|
|
File "test/test_bytes.py", line 323 in test_hex
|
|
|
|
|
File "unittest/case.py", line 600 in run
|
|
|
|
|
File "unittest/case.py", line 648 in __call__
|
|
|
|
|
File "unittest/suite.py", line 122 in run
|
|
|
|
|
File "unittest/suite.py", line 84 in __call__
|
|
|
|
|
File "unittest/suite.py", line 122 in run
|
|
|
|
|
File "unittest/suite.py", line 84 in __call__
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`26516` and :issue:`26564`.)
|
2016-03-14 08:04:26 -03:00
|
|
|
|
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
.. _whatsnew36-tracing:
|
|
|
|
|
|
2016-09-09 21:37:37 -03:00
|
|
|
|
DTrace and SystemTap probing support
|
|
|
|
|
------------------------------------
|
|
|
|
|
|
|
|
|
|
Python can now be built ``--with-dtrace`` which enables static markers
|
|
|
|
|
for the following events in the interpreter:
|
|
|
|
|
|
|
|
|
|
* function call/return
|
|
|
|
|
|
|
|
|
|
* garbage collection started/finished
|
|
|
|
|
|
|
|
|
|
* line of code executed.
|
|
|
|
|
|
|
|
|
|
This can be used to instrument running interpreters in production,
|
2021-04-08 17:32:21 -03:00
|
|
|
|
without the need to recompile specific :ref:`debug builds <debug-build>` or
|
|
|
|
|
providing application-specific profiling/debugging code.
|
2016-09-09 21:37:37 -03:00
|
|
|
|
|
2016-09-10 21:38:51 -03:00
|
|
|
|
More details in :ref:`instrumentation`.
|
2016-09-09 21:37:37 -03:00
|
|
|
|
|
|
|
|
|
The current implementation is tested on Linux and macOS. Additional
|
|
|
|
|
markers may be added in the future.
|
|
|
|
|
|
|
|
|
|
(Contributed by Łukasz Langa in :issue:`21590`, based on patches by
|
|
|
|
|
Jesús Cea Avión, David Malcolm, and Nikhil Benesch.)
|
|
|
|
|
|
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
Other Language Changes
|
|
|
|
|
======================
|
|
|
|
|
|
2016-08-15 21:58:14 -03:00
|
|
|
|
Some smaller changes made to the core Python language are:
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
* A ``global`` or ``nonlocal`` statement must now textually appear
|
|
|
|
|
before the first use of the affected name in the same scope.
|
2018-10-26 07:52:11 -03:00
|
|
|
|
Previously this was a :exc:`SyntaxWarning`.
|
2016-09-07 21:40:12 -03:00
|
|
|
|
|
2016-11-14 15:49:18 -04:00
|
|
|
|
* It is now possible to set a :ref:`special method <specialnames>` to
|
|
|
|
|
``None`` to indicate that the corresponding operation is not available.
|
|
|
|
|
For example, if a class sets :meth:`__iter__` to ``None``, the class
|
|
|
|
|
is not iterable.
|
|
|
|
|
(Contributed by Andrew Barnert and Ivan Levkivskyi in :issue:`25958`.)
|
|
|
|
|
|
2016-08-15 21:58:14 -03:00
|
|
|
|
* Long sequences of repeated traceback lines are now abbreviated as
|
|
|
|
|
``"[Previous line repeated {count} more times]"`` (see
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:ref:`whatsnew36-traceback` for an example).
|
2016-08-15 21:58:14 -03:00
|
|
|
|
(Contributed by Emanuel Barry in :issue:`26823`.)
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-09-07 20:56:15 -03:00
|
|
|
|
* Import now raises the new exception :exc:`ModuleNotFoundError`
|
|
|
|
|
(subclass of :exc:`ImportError`) when it cannot find a module. Code
|
2016-11-21 09:38:59 -04:00
|
|
|
|
that currently checks for ImportError (in try-except) will still work.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Eric Snow in :issue:`15767`.)
|
|
|
|
|
|
|
|
|
|
* Class methods relying on zero-argument ``super()`` will now work correctly
|
|
|
|
|
when called from metaclass methods during class creation.
|
|
|
|
|
(Contributed by Martin Teichmann in :issue:`23722`.)
|
2016-09-07 20:56:15 -03:00
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
|
|
|
|
New Modules
|
|
|
|
|
===========
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
.. _whatsnew36-pep506:
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
secrets
|
|
|
|
|
-------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The main purpose of the new :mod:`secrets` module is to provide an obvious way
|
|
|
|
|
to reliably generate cryptographically strong pseudo-random values suitable
|
|
|
|
|
for managing secrets, such as account authentication, tokens, and similar.
|
|
|
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
|
|
|
|
|
Note that the pseudo-random generators in the :mod:`random` module
|
|
|
|
|
should *NOT* be used for security purposes. Use :mod:`secrets`
|
|
|
|
|
on Python 3.6+ and :func:`os.urandom()` on Python 3.5 and earlier.
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
:pep:`506` -- Adding A Secrets Module To The Standard Library
|
|
|
|
|
PEP written and implemented by Steven D'Aprano.
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Improved Modules
|
|
|
|
|
================
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
array
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Exhausted iterators of :class:`array.array` will now stay exhausted even
|
|
|
|
|
if the iterated array is extended. This is consistent with the behavior
|
|
|
|
|
of other mutable sequences.
|
|
|
|
|
|
|
|
|
|
Contributed by Serhiy Storchaka in :issue:`26492`.
|
|
|
|
|
|
|
|
|
|
ast
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
The new :class:`ast.Constant` AST node has been added. It can be used
|
|
|
|
|
by external AST optimizers for the purposes of constant folding.
|
|
|
|
|
|
|
|
|
|
Contributed by Victor Stinner in :issue:`26146`.
|
|
|
|
|
|
|
|
|
|
|
2016-05-16 17:25:16 -03:00
|
|
|
|
asyncio
|
|
|
|
|
-------
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
Starting with Python 3.6 the ``asyncio`` module is no longer provisional and its
|
2016-11-10 14:27:22 -04:00
|
|
|
|
API is considered stable.
|
|
|
|
|
|
|
|
|
|
Notable changes in the :mod:`asyncio` module since Python 3.5.0
|
|
|
|
|
(all backported to 3.5.x due to the provisional status):
|
2016-05-16 17:25:16 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The :func:`~asyncio.get_event_loop` function has been changed to
|
2018-05-29 15:37:08 -03:00
|
|
|
|
always return the currently running loop when called from coroutines
|
2016-11-10 14:27:22 -04:00
|
|
|
|
and callbacks.
|
|
|
|
|
(Contributed by Yury Selivanov in :issue:`28613`.)
|
2016-05-16 17:25:16 -03:00
|
|
|
|
|
|
|
|
|
* The :func:`~asyncio.ensure_future` function and all functions that
|
2018-09-11 13:54:40 -03:00
|
|
|
|
use it, such as :meth:`loop.run_until_complete() <asyncio.loop.run_until_complete>`,
|
2016-05-16 17:25:16 -03:00
|
|
|
|
now accept all kinds of :term:`awaitable objects <awaitable>`.
|
|
|
|
|
(Contributed by Yury Selivanov.)
|
|
|
|
|
|
|
|
|
|
* New :func:`~asyncio.run_coroutine_threadsafe` function to submit
|
|
|
|
|
coroutines to event loops from other threads.
|
|
|
|
|
(Contributed by Vincent Michel.)
|
|
|
|
|
|
|
|
|
|
* New :meth:`Transport.is_closing() <asyncio.BaseTransport.is_closing>`
|
|
|
|
|
method to check if the transport is closing or closed.
|
|
|
|
|
(Contributed by Yury Selivanov.)
|
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
|
* The :meth:`loop.create_server() <asyncio.loop.create_server>`
|
2016-05-16 17:25:16 -03:00
|
|
|
|
method can now accept a list of hosts.
|
|
|
|
|
(Contributed by Yann Sionneau.)
|
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
|
* New :meth:`loop.create_future() <asyncio.loop.create_future>`
|
2016-05-16 17:25:16 -03:00
|
|
|
|
method to create Future objects. This allows alternative event
|
|
|
|
|
loop implementations, such as
|
|
|
|
|
`uvloop <https://github.com/MagicStack/uvloop>`_, to provide a faster
|
|
|
|
|
:class:`asyncio.Future` implementation.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Yury Selivanov in :issue:`27041`.)
|
2016-05-16 17:25:16 -03:00
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
|
* New :meth:`loop.get_exception_handler() <asyncio.loop.get_exception_handler>`
|
2016-05-16 17:25:16 -03:00
|
|
|
|
method to get the current exception handler.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Yury Selivanov in :issue:`27040`.)
|
2016-05-16 17:25:16 -03:00
|
|
|
|
|
|
|
|
|
* New :meth:`StreamReader.readuntil() <asyncio.StreamReader.readuntil>`
|
|
|
|
|
method to read data from the stream until a separator bytes
|
|
|
|
|
sequence appears.
|
|
|
|
|
(Contributed by Mark Korenberg.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The performance of :meth:`StreamReader.readexactly() <asyncio.StreamReader.readexactly>`
|
|
|
|
|
has been improved.
|
|
|
|
|
(Contributed by Mark Korenberg in :issue:`28370`.)
|
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
|
* The :meth:`loop.getaddrinfo() <asyncio.loop.getaddrinfo>`
|
2016-05-16 17:25:16 -03:00
|
|
|
|
method is optimized to avoid calling the system ``getaddrinfo``
|
|
|
|
|
function if the address is already resolved.
|
|
|
|
|
(Contributed by A. Jesse Jiryu Davis.)
|
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
|
* The :meth:`loop.stop() <asyncio.loop.stop>`
|
2016-11-10 14:27:22 -04:00
|
|
|
|
method has been changed to stop the loop immediately after
|
|
|
|
|
the current iteration. Any new callbacks scheduled as a result
|
|
|
|
|
of the last iteration will be discarded.
|
|
|
|
|
(Contributed by Guido van Rossum in :issue:`25593`.)
|
|
|
|
|
|
|
|
|
|
* :meth:`Future.set_exception <asyncio.futures.Future.set_exception>`
|
|
|
|
|
will now raise :exc:`TypeError` when passed an instance of
|
2016-11-21 09:38:59 -04:00
|
|
|
|
the :exc:`StopIteration` exception.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Chris Angelico in :issue:`26221`.)
|
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
|
* New :meth:`loop.connect_accepted_socket() <asyncio.loop.connect_accepted_socket>`
|
2016-11-10 14:27:22 -04:00
|
|
|
|
method to be used by servers that accept connections outside of asyncio,
|
|
|
|
|
but that use asyncio to handle them.
|
|
|
|
|
(Contributed by Jim Fulton in :issue:`27392`.)
|
|
|
|
|
|
2016-12-12 17:44:58 -04:00
|
|
|
|
* ``TCP_NODELAY`` flag is now set for all TCP transports by default.
|
|
|
|
|
(Contributed by Yury Selivanov in :issue:`27456`.)
|
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
|
* New :meth:`loop.shutdown_asyncgens() <asyncio.loop.shutdown_asyncgens>`
|
2016-12-15 18:56:43 -04:00
|
|
|
|
to properly close pending asynchronous generators before closing the
|
|
|
|
|
loop.
|
|
|
|
|
(Contributed by Yury Selivanov in :issue:`28003`.)
|
|
|
|
|
|
|
|
|
|
* :class:`Future <asyncio.Future>` and :class:`Task <asyncio.Task>`
|
|
|
|
|
classes now have an optimized C implementation which makes asyncio
|
|
|
|
|
code up to 30% faster.
|
|
|
|
|
(Contributed by Yury Selivanov and INADA Naoki in :issue:`26081`
|
|
|
|
|
and :issue:`28544`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
|
|
|
|
binascii
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
The :func:`~binascii.b2a_base64` function now accepts an optional *newline*
|
|
|
|
|
keyword argument to control whether the newline character is appended to the
|
|
|
|
|
return value.
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`25357`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmath
|
|
|
|
|
-----
|
|
|
|
|
|
2017-05-04 06:25:09 -03:00
|
|
|
|
The new :const:`cmath.tau` (*τ*) constant has been added.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Lisa Roach in :issue:`12345`, see :pep:`628` for details.)
|
|
|
|
|
|
|
|
|
|
New constants: :const:`cmath.inf` and :const:`cmath.nan` to
|
|
|
|
|
match :const:`math.inf` and :const:`math.nan`, and also :const:`cmath.infj`
|
|
|
|
|
and :const:`cmath.nanj` to match the format used by complex repr.
|
|
|
|
|
(Contributed by Mark Dickinson in :issue:`23229`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
collections
|
|
|
|
|
-----------
|
|
|
|
|
|
2016-11-14 15:49:18 -04:00
|
|
|
|
The new :class:`~collections.abc.Collection` abstract base class has been
|
2016-11-10 14:27:22 -04:00
|
|
|
|
added to represent sized iterable container classes.
|
2016-11-14 15:49:18 -04:00
|
|
|
|
(Contributed by Ivan Levkivskyi, docs by Neil Girdhar in :issue:`27598`.)
|
|
|
|
|
|
|
|
|
|
The new :class:`~collections.abc.Reversible` abstract base class represents
|
2016-11-21 09:38:59 -04:00
|
|
|
|
iterable classes that also provide the :meth:`__reversed__` method.
|
2016-11-14 15:49:18 -04:00
|
|
|
|
(Contributed by Ivan Levkivskyi in :issue:`25987`.)
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
2016-11-16 19:25:04 -04:00
|
|
|
|
The new :class:`~collections.abc.AsyncGenerator` abstract base class represents
|
|
|
|
|
asynchronous generators.
|
|
|
|
|
(Contributed by Yury Selivanov in :issue:`28720`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :func:`~collections.namedtuple` function now accepts an optional
|
|
|
|
|
keyword argument *module*, which, when specified, is used for
|
|
|
|
|
the ``__module__`` attribute of the returned named tuple class.
|
|
|
|
|
(Contributed by Raymond Hettinger in :issue:`17941`.)
|
|
|
|
|
|
|
|
|
|
The *verbose* and *rename* arguments for
|
|
|
|
|
:func:`~collections.namedtuple` are now keyword-only.
|
|
|
|
|
(Contributed by Raymond Hettinger in :issue:`25628`.)
|
|
|
|
|
|
|
|
|
|
Recursive :class:`collections.deque` instances can now be pickled.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`26482`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
concurrent.futures
|
|
|
|
|
------------------
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
The :class:`ThreadPoolExecutor <concurrent.futures.ThreadPoolExecutor>`
|
2016-11-10 14:27:22 -04:00
|
|
|
|
class constructor now accepts an optional *thread_name_prefix* argument
|
|
|
|
|
to make it possible to customize the names of the threads created by the
|
|
|
|
|
pool.
|
|
|
|
|
(Contributed by Gregory P. Smith in :issue:`27664`.)
|
|
|
|
|
|
2016-05-16 17:25:16 -03:00
|
|
|
|
|
2016-04-08 16:15:27 -03:00
|
|
|
|
contextlib
|
|
|
|
|
----------
|
|
|
|
|
|
|
|
|
|
The :class:`contextlib.AbstractContextManager` class has been added to
|
2016-11-10 14:27:22 -04:00
|
|
|
|
provide an abstract base class for context managers. It provides a
|
2022-10-06 22:01:30 -03:00
|
|
|
|
sensible default implementation for ``__enter__()`` which returns
|
|
|
|
|
``self`` and leaves ``__exit__()`` an abstract method. A matching
|
2016-04-08 16:15:27 -03:00
|
|
|
|
class has been added to the :mod:`typing` module as
|
|
|
|
|
:class:`typing.ContextManager`.
|
|
|
|
|
(Contributed by Brett Cannon in :issue:`25609`.)
|
|
|
|
|
|
|
|
|
|
|
2015-10-08 07:58:49 -03:00
|
|
|
|
datetime
|
|
|
|
|
--------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :class:`~datetime.datetime` and :class:`~datetime.time` classes have
|
|
|
|
|
the new :attr:`~time.fold` attribute used to disambiguate local time
|
|
|
|
|
when necessary. Many functions in the :mod:`datetime` have been
|
|
|
|
|
updated to support local time disambiguation.
|
|
|
|
|
See :ref:`Local Time Disambiguation <whatsnew36-pep495>` section for more
|
|
|
|
|
information.
|
|
|
|
|
(Contributed by Alexander Belopolsky in :issue:`24773`.)
|
|
|
|
|
|
2015-11-13 21:29:17 -04:00
|
|
|
|
The :meth:`datetime.strftime() <datetime.datetime.strftime>` and
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:meth:`date.strftime() <datetime.date.strftime>` methods now support
|
|
|
|
|
ISO 8601 date directives ``%G``, ``%u`` and ``%V``.
|
2015-10-08 07:58:49 -03:00
|
|
|
|
(Contributed by Ashley Anderson in :issue:`12006`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :func:`datetime.isoformat() <datetime.datetime.isoformat>` function
|
|
|
|
|
now accepts an optional *timespec* argument that specifies the number
|
|
|
|
|
of additional components of the time value to include.
|
|
|
|
|
(Contributed by Alessandro Cucci and Alexander Belopolsky in :issue:`19475`.)
|
|
|
|
|
|
|
|
|
|
The :meth:`datetime.combine() <datetime.datetime.combine>` now
|
|
|
|
|
accepts an optional *tzinfo* argument.
|
|
|
|
|
(Contributed by Alexander Belopolsky in :issue:`27661`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimal
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
New :meth:`Decimal.as_integer_ratio() <decimal.Decimal.as_integer_ratio>`
|
|
|
|
|
method that returns a pair ``(n, d)`` of integers that represent the given
|
|
|
|
|
:class:`~decimal.Decimal` instance as a fraction, in lowest terms and
|
|
|
|
|
with a positive denominator::
|
|
|
|
|
|
|
|
|
|
>>> Decimal('-3.14').as_integer_ratio()
|
|
|
|
|
(-157, 50)
|
2015-10-08 07:58:49 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Stefan Krah amd Mark Dickinson in :issue:`25928`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
distutils
|
|
|
|
|
---------
|
2016-08-21 17:09:27 -03:00
|
|
|
|
|
|
|
|
|
The ``default_format`` attribute has been removed from
|
2022-07-25 07:20:09 -03:00
|
|
|
|
``distutils.command.sdist.sdist`` and the ``formats``
|
2016-08-21 17:09:27 -03:00
|
|
|
|
attribute defaults to ``['gztar']``. Although not anticipated,
|
2016-11-21 09:38:59 -04:00
|
|
|
|
any code relying on the presence of ``default_format`` may
|
2016-08-21 17:09:27 -03:00
|
|
|
|
need to be adapted. See :issue:`27819` for more details.
|
|
|
|
|
|
|
|
|
|
|
2016-09-07 17:48:35 -03:00
|
|
|
|
email
|
|
|
|
|
-----
|
|
|
|
|
|
2016-09-07 22:21:58 -03:00
|
|
|
|
The new email API, enabled via the *policy* keyword to various constructors, is
|
|
|
|
|
no longer provisional. The :mod:`email` documentation has been reorganized and
|
|
|
|
|
rewritten to focus on the new API, while retaining the old documentation for
|
|
|
|
|
the legacy API. (Contributed by R. David Murray in :issue:`24277`.)
|
|
|
|
|
|
2016-09-07 17:48:35 -03:00
|
|
|
|
The :mod:`email.mime` classes now all accept an optional *policy* keyword.
|
|
|
|
|
(Contributed by Berker Peksag in :issue:`27331`.)
|
|
|
|
|
|
2016-09-08 18:57:06 -03:00
|
|
|
|
The :class:`~email.generator.DecodedGenerator` now supports the *policy*
|
|
|
|
|
keyword.
|
|
|
|
|
|
2016-09-09 19:39:18 -03:00
|
|
|
|
There is a new :mod:`~email.policy` attribute,
|
|
|
|
|
:attr:`~email.policy.Policy.message_factory`, that controls what class is used
|
|
|
|
|
by default when the parser creates new message objects. For the
|
|
|
|
|
:attr:`email.policy.compat32` policy this is :class:`~email.message.Message`,
|
|
|
|
|
for the new policies it is :class:`~email.message.EmailMessage`.
|
|
|
|
|
(Contributed by R. David Murray in :issue:`20476`.)
|
|
|
|
|
|
2016-09-07 17:48:35 -03:00
|
|
|
|
|
2016-09-06 23:55:55 -03:00
|
|
|
|
encodings
|
|
|
|
|
---------
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
On Windows, added the ``'oem'`` encoding to use ``CP_OEMCP``, and the ``'ansi'``
|
2016-09-06 23:55:55 -03:00
|
|
|
|
alias for the existing ``'mbcs'`` encoding, which uses the ``CP_ACP`` code page.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Steve Dower in :issue:`27959`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
Two new enumeration base classes have been added to the :mod:`enum` module:
|
|
|
|
|
:class:`~enum.Flag` and :class:`~enum.IntFlags`. Both are used to define
|
|
|
|
|
constants that can be combined using the bitwise operators.
|
|
|
|
|
(Contributed by Ethan Furman in :issue:`23591`.)
|
|
|
|
|
|
|
|
|
|
Many standard library modules have been updated to use the
|
|
|
|
|
:class:`~enum.IntFlags` class for their constants.
|
|
|
|
|
|
|
|
|
|
The new :class:`enum.auto` value can be used to assign values to enum
|
|
|
|
|
members automatically::
|
|
|
|
|
|
|
|
|
|
>>> from enum import Enum, auto
|
|
|
|
|
>>> class Color(Enum):
|
|
|
|
|
... red = auto()
|
|
|
|
|
... blue = auto()
|
|
|
|
|
... green = auto()
|
|
|
|
|
...
|
|
|
|
|
>>> list(Color)
|
|
|
|
|
[<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>]
|
2016-09-06 23:55:55 -03:00
|
|
|
|
|
2016-09-08 18:57:06 -03:00
|
|
|
|
|
2016-03-23 06:39:17 -03:00
|
|
|
|
faulthandler
|
|
|
|
|
------------
|
|
|
|
|
|
2016-04-17 03:39:28 -03:00
|
|
|
|
On Windows, the :mod:`faulthandler` module now installs a handler for Windows
|
2016-03-23 06:39:17 -03:00
|
|
|
|
exceptions: see :func:`faulthandler.enable`. (Contributed by Victor Stinner in
|
|
|
|
|
:issue:`23848`.)
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
fileinput
|
|
|
|
|
---------
|
|
|
|
|
|
|
|
|
|
:func:`~fileinput.hook_encoded` now supports the *errors* argument.
|
|
|
|
|
(Contributed by Joseph Hackman in :issue:`25788`.)
|
|
|
|
|
|
|
|
|
|
|
2016-09-11 20:14:35 -03:00
|
|
|
|
hashlib
|
|
|
|
|
-------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:mod:`hashlib` supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2.
|
2016-09-11 20:14:35 -03:00
|
|
|
|
(Contributed by Christian Heimes in :issue:`26470`.)
|
|
|
|
|
|
|
|
|
|
BLAKE2 hash functions were added to the module. :func:`~hashlib.blake2b`
|
|
|
|
|
and :func:`~hashlib.blake2s` are always available and support the full
|
|
|
|
|
feature set of BLAKE2.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`26798` based on code by
|
|
|
|
|
Dmitry Chestnykh and Samuel Neves. Documentation written by Dmitry Chestnykh.)
|
|
|
|
|
|
|
|
|
|
The SHA-3 hash functions :func:`~hashlib.sha3_224`, :func:`~hashlib.sha3_256`,
|
|
|
|
|
:func:`~hashlib.sha3_384`, :func:`~hashlib.sha3_512`, and SHAKE hash functions
|
|
|
|
|
:func:`~hashlib.shake_128` and :func:`~hashlib.shake_256` were added.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`16113`. Keccak Code Package
|
|
|
|
|
by Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche, and
|
|
|
|
|
Ronny Van Keer.)
|
|
|
|
|
|
|
|
|
|
The password-based key derivation function :func:`~hashlib.scrypt` is now
|
|
|
|
|
available with OpenSSL 1.1.0 and newer.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`27928`.)
|
|
|
|
|
|
2016-08-24 03:33:33 -03:00
|
|
|
|
http.client
|
|
|
|
|
-----------
|
|
|
|
|
|
|
|
|
|
:meth:`HTTPConnection.request() <http.client.HTTPConnection.request>` and
|
|
|
|
|
:meth:`~http.client.HTTPConnection.endheaders` both now support
|
|
|
|
|
chunked encoding request bodies.
|
|
|
|
|
(Contributed by Demian Brecht and Rolf Krahl in :issue:`12319`.)
|
|
|
|
|
|
|
|
|
|
|
2016-06-13 01:41:53 -03:00
|
|
|
|
idlelib and IDLE
|
|
|
|
|
----------------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The idlelib package is being modernized and refactored to make IDLE look and
|
|
|
|
|
work better and to make the code easier to understand, test, and improve. Part
|
|
|
|
|
of making IDLE look better, especially on Linux and Mac, is using ttk widgets,
|
|
|
|
|
mostly in the dialogs. As a result, IDLE no longer runs with tcl/tk 8.4. It
|
|
|
|
|
now requires tcl/tk 8.5 or 8.6. We recommend running the latest release of
|
|
|
|
|
either.
|
2016-06-13 01:41:53 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
'Modernizing' includes renaming and consolidation of idlelib modules. The
|
|
|
|
|
renaming of files with partial uppercase names is similar to the renaming of,
|
|
|
|
|
for instance, Tkinter and TkFont to tkinter and tkinter.font in 3.0. As a
|
|
|
|
|
result, imports of idlelib files that worked in 3.5 will usually not work in
|
|
|
|
|
3.6. At least a module name change will be needed (see idlelib/README.txt),
|
|
|
|
|
sometimes more. (Name changes contributed by Al Swiegart and Terry Reedy in
|
|
|
|
|
:issue:`24225`. Most idlelib patches since have been and will be part of the
|
|
|
|
|
process.)
|
2016-06-13 01:41:53 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
In compensation, the eventual result with be that some idlelib classes will be
|
|
|
|
|
easier to use, with better APIs and docstrings explaining them. Additional
|
|
|
|
|
useful information will be added to idlelib when available.
|
2016-06-13 01:41:53 -03:00
|
|
|
|
|
2018-06-10 15:03:40 -03:00
|
|
|
|
New in 3.6.2:
|
|
|
|
|
|
|
|
|
|
Multiple fixes for autocompletion. (Contributed by Louie Lu in :issue:`15786`.)
|
|
|
|
|
|
|
|
|
|
New in 3.6.3:
|
|
|
|
|
|
|
|
|
|
Module Browser (on the File menu, formerly called Class Browser),
|
|
|
|
|
now displays nested functions and classes in addition to top-level
|
|
|
|
|
functions and classes.
|
|
|
|
|
(Contributed by Guilherme Polo, Cheryl Sabella, and Terry Jan Reedy
|
|
|
|
|
in :issue:`1612262`.)
|
|
|
|
|
|
|
|
|
|
The IDLE features formerly implemented as extensions have been reimplemented
|
|
|
|
|
as normal features. Their settings have been moved from the Extensions tab
|
|
|
|
|
to other dialog tabs.
|
|
|
|
|
(Contributed by Charles Wohlganger and Terry Jan Reedy in :issue:`27099`.)
|
|
|
|
|
|
|
|
|
|
The Settings dialog (Options, Configure IDLE) has been partly rewritten
|
|
|
|
|
to improve both appearance and function.
|
|
|
|
|
(Contributed by Cheryl Sabella and Terry Jan Reedy in multiple issues.)
|
|
|
|
|
|
|
|
|
|
New in 3.6.4:
|
|
|
|
|
|
|
|
|
|
The font sample now includes a selection of non-Latin characters so that
|
|
|
|
|
users can better see the effect of selecting a particular font.
|
|
|
|
|
(Contributed by Terry Jan Reedy in :issue:`13802`.)
|
|
|
|
|
The sample can be edited to include other characters.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`31860`.)
|
|
|
|
|
|
|
|
|
|
New in 3.6.6:
|
|
|
|
|
|
|
|
|
|
Editor code context option revised. Box displays all context lines up to
|
|
|
|
|
maxlines. Clicking on a context line jumps the editor to that line. Context
|
|
|
|
|
colors for custom themes is added to Highlights tab of Settings dialog.
|
|
|
|
|
(Contributed by Cheryl Sabella and Terry Jan Reedy in :issue:`33642`,
|
2018-09-25 13:08:54 -03:00
|
|
|
|
:issue:`33768`, and :issue:`33679`.)
|
2018-06-10 15:03:40 -03:00
|
|
|
|
|
2018-06-11 15:14:32 -03:00
|
|
|
|
On Windows, a new API call tells Windows that tk scales for DPI. On Windows
|
|
|
|
|
8.1+ or 10, with DPI compatibility properties of the Python binary
|
|
|
|
|
unchanged, and a monitor resolution greater than 96 DPI, this should
|
|
|
|
|
make text and lines sharper. It should otherwise have no effect.
|
2018-09-25 13:08:54 -03:00
|
|
|
|
(Contributed by Terry Jan Reedy in :issue:`33656`.)
|
|
|
|
|
|
|
|
|
|
New in 3.6.7:
|
|
|
|
|
|
|
|
|
|
Output over N lines (50 by default) is squeezed down to a button.
|
|
|
|
|
N can be changed in the PyShell section of the General page of the
|
|
|
|
|
Settings dialog. Fewer, but possibly extra long, lines can be squeezed by
|
|
|
|
|
right clicking on the output. Squeezed output can be expanded in place
|
|
|
|
|
by double-clicking the button or into the clipboard or a separate window
|
|
|
|
|
by right-clicking the button. (Contributed by Tal Einat in :issue:`1529353`.)
|
2018-06-11 15:14:32 -03:00
|
|
|
|
|
2016-06-13 01:41:53 -03:00
|
|
|
|
|
2016-06-25 14:58:17 -03:00
|
|
|
|
importlib
|
|
|
|
|
---------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
Import now raises the new exception :exc:`ModuleNotFoundError`
|
|
|
|
|
(subclass of :exc:`ImportError`) when it cannot find a module. Code
|
|
|
|
|
that current checks for ``ImportError`` (in try-except) will still work.
|
|
|
|
|
(Contributed by Eric Snow in :issue:`15767`.)
|
|
|
|
|
|
2016-06-25 14:58:17 -03:00
|
|
|
|
:class:`importlib.util.LazyLoader` now calls
|
|
|
|
|
:meth:`~importlib.abc.Loader.create_module` on the wrapped loader, removing the
|
|
|
|
|
restriction that :class:`importlib.machinery.BuiltinImporter` and
|
|
|
|
|
:class:`importlib.machinery.ExtensionFileLoader` couldn't be used with
|
|
|
|
|
:class:`importlib.util.LazyLoader`.
|
|
|
|
|
|
2016-09-07 22:39:18 -03:00
|
|
|
|
:func:`importlib.util.cache_from_source`,
|
|
|
|
|
:func:`importlib.util.source_from_cache`, and
|
|
|
|
|
:func:`importlib.util.spec_from_file_location` now accept a
|
|
|
|
|
:term:`path-like object`.
|
|
|
|
|
|
2016-06-25 14:58:17 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
inspect
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
The :func:`inspect.signature() <inspect.signature>` function now reports the
|
|
|
|
|
implicit ``.0`` parameters generated by the compiler for comprehension and
|
|
|
|
|
generator expression scopes as if they were positional-only parameters called
|
|
|
|
|
``implicit0``. (Contributed by Jelle Zijlstra in :issue:`19611`.)
|
|
|
|
|
|
2016-12-02 06:29:57 -04:00
|
|
|
|
To reduce code churn when upgrading from Python 2.7 and the legacy
|
|
|
|
|
:func:`inspect.getargspec` API, the previously documented deprecation of
|
|
|
|
|
:func:`inspect.getfullargspec` has been reversed. While this function is
|
|
|
|
|
convenient for single/source Python 2/3 code bases, the richer
|
|
|
|
|
:func:`inspect.signature` interface remains the recommended approach for new
|
|
|
|
|
code. (Contributed by Nick Coghlan in :issue:`27172`)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
2016-09-10 07:16:18 -03:00
|
|
|
|
json
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
:func:`json.load` and :func:`json.loads` now support binary input. Encoded
|
|
|
|
|
JSON should be represented using either UTF-8, UTF-16, or UTF-32.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`17909`.)
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
logging
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
The new :meth:`WatchedFileHandler.reopenIfNeeded() <logging.handlers.WatchedFileHandler.reopenIfNeeded>`
|
|
|
|
|
method has been added to add the ability to check if the log file needs to
|
|
|
|
|
be reopened.
|
|
|
|
|
(Contributed by Marian Horban in :issue:`24884`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
math
|
|
|
|
|
----
|
|
|
|
|
|
2017-05-04 06:25:09 -03:00
|
|
|
|
The tau (*τ*) constant has been added to the :mod:`math` and :mod:`cmath`
|
2016-11-10 14:27:22 -04:00
|
|
|
|
modules.
|
|
|
|
|
(Contributed by Lisa Roach in :issue:`12345`, see :pep:`628` for details.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
multiprocessing
|
|
|
|
|
---------------
|
|
|
|
|
|
|
|
|
|
:ref:`Proxy Objects <multiprocessing-proxy_objects>` returned by
|
|
|
|
|
:func:`multiprocessing.Manager` can now be nested.
|
|
|
|
|
(Contributed by Davin Potts in :issue:`6766`.)
|
|
|
|
|
|
|
|
|
|
|
2016-02-11 07:21:30 -04:00
|
|
|
|
os
|
|
|
|
|
--
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
See the summary of :ref:`PEP 519 <whatsnew36-pep519>` for details on how the
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:mod:`os` and :mod:`os.path` modules now support
|
|
|
|
|
:term:`path-like objects <path-like object>`.
|
|
|
|
|
|
2016-11-20 02:23:07 -04:00
|
|
|
|
:func:`~os.scandir` now supports :class:`bytes` paths on Windows.
|
|
|
|
|
|
2016-02-11 07:21:30 -04:00
|
|
|
|
A new :meth:`~os.scandir.close` method allows explicitly closing a
|
|
|
|
|
:func:`~os.scandir` iterator. The :func:`~os.scandir` iterator now
|
|
|
|
|
supports the :term:`context manager` protocol. If a :func:`scandir`
|
|
|
|
|
iterator is neither exhausted nor explicitly closed a :exc:`ResourceWarning`
|
|
|
|
|
will be emitted in its destructor.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`25994`.)
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
On Linux, :func:`os.urandom` now blocks until the system urandom entropy pool
|
|
|
|
|
is initialized to increase the security. See the :pep:`524` for the rationale.
|
|
|
|
|
|
2016-09-06 20:18:52 -03:00
|
|
|
|
The Linux ``getrandom()`` syscall (get random bytes) is now exposed as the new
|
|
|
|
|
:func:`os.getrandom` function.
|
|
|
|
|
(Contributed by Victor Stinner, part of the :pep:`524`)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
|
|
|
|
pathlib
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
:mod:`pathlib` now supports :term:`path-like objects <path-like object>`.
|
|
|
|
|
(Contributed by Brett Cannon in :issue:`27186`.)
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
See the summary of :ref:`PEP 519 <whatsnew36-pep519>` for details.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pdb
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
The :class:`~pdb.Pdb` class constructor has a new optional *readrc* argument
|
|
|
|
|
to control whether ``.pdbrc`` files should be read.
|
2016-09-07 22:39:18 -03:00
|
|
|
|
|
|
|
|
|
|
2015-10-10 16:42:18 -03:00
|
|
|
|
pickle
|
|
|
|
|
------
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
Objects that need ``__new__`` called with keyword arguments can now be pickled
|
2015-10-10 16:42:18 -03:00
|
|
|
|
using :ref:`pickle protocols <pickle-protocols>` older than protocol version 4.
|
|
|
|
|
Protocol version 4 already supports this case. (Contributed by Serhiy
|
|
|
|
|
Storchaka in :issue:`24164`.)
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
pickletools
|
|
|
|
|
-----------
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
:func:`pickletools.dis()` now outputs the implicit memo index for the
|
2016-11-10 14:27:22 -04:00
|
|
|
|
``MEMOIZE`` opcode.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`25382`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pydoc
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
The :mod:`pydoc` module has learned to respect the ``MANPAGER``
|
|
|
|
|
environment variable.
|
|
|
|
|
(Contributed by Matthias Klose in :issue:`8637`.)
|
|
|
|
|
|
|
|
|
|
:func:`help` and :mod:`pydoc` can now list named tuple fields in the
|
|
|
|
|
order they were defined rather than alphabetically.
|
|
|
|
|
(Contributed by Raymond Hettinger in :issue:`24879`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
random
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
The new :func:`~random.choices` function returns a list of elements of
|
|
|
|
|
specified size from the given population with optional weights.
|
|
|
|
|
(Contributed by Raymond Hettinger in :issue:`18844`.)
|
|
|
|
|
|
|
|
|
|
|
2016-09-09 18:57:55 -03:00
|
|
|
|
re
|
|
|
|
|
--
|
|
|
|
|
|
|
|
|
|
Added support of modifier spans in regular expressions. Examples:
|
|
|
|
|
``'(?i:p)ython'`` matches ``'python'`` and ``'Python'``, but not ``'PYTHON'``;
|
|
|
|
|
``'(?i)g(?-i:v)r'`` matches ``'GvR'`` and ``'gvr'``, but not ``'GVR'``.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`433028`.)
|
|
|
|
|
|
2016-09-11 10:50:47 -03:00
|
|
|
|
Match object groups can be accessed by ``__getitem__``, which is
|
|
|
|
|
equivalent to ``group()``. So ``mo['name']`` is now equivalent to
|
|
|
|
|
``mo.group('name')``. (Contributed by Eric Smith in :issue:`24454`.)
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
:class:`~re.Match` objects now support
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:meth:`index-like objects <object.__index__>` as group
|
|
|
|
|
indices.
|
|
|
|
|
(Contributed by Jeroen Demeyer and Xiang Zhang in :issue:`27177`.)
|
|
|
|
|
|
2016-09-09 18:57:55 -03:00
|
|
|
|
|
2016-05-14 22:26:25 -03:00
|
|
|
|
readline
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
Added :func:`~readline.set_auto_history` to enable or disable
|
|
|
|
|
automatic addition of input to the history list. (Contributed by
|
|
|
|
|
Tyler Crompton in :issue:`26870`.)
|
|
|
|
|
|
|
|
|
|
|
2015-11-13 21:29:17 -04:00
|
|
|
|
rlcompleter
|
|
|
|
|
-----------
|
2015-09-27 07:43:50 -03:00
|
|
|
|
|
|
|
|
|
Private and special attribute names now are omitted unless the prefix starts
|
2015-11-13 21:29:17 -04:00
|
|
|
|
with underscores. A space or a colon is added after some completed keywords.
|
2015-09-27 07:43:50 -03:00
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`25011` and :issue:`25209`.)
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
shlex
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
The :class:`~shlex.shlex` has much
|
|
|
|
|
:ref:`improved shell compatibility <improved-shell-compatibility>`
|
|
|
|
|
through the new *punctuation_chars* argument to control which characters
|
|
|
|
|
are treated as punctuation.
|
|
|
|
|
(Contributed by Vinay Sajip in :issue:`1521950`.)
|
|
|
|
|
|
|
|
|
|
|
2016-04-08 19:04:28 -03:00
|
|
|
|
site
|
|
|
|
|
----
|
|
|
|
|
|
2022-10-06 22:01:30 -03:00
|
|
|
|
When specifying paths to add to :attr:`sys.path` in a ``.pth`` file,
|
2016-04-08 19:04:28 -03:00
|
|
|
|
you may now specify file paths on top of directories (e.g. zip files).
|
|
|
|
|
(Contributed by Wolfgang Langner in :issue:`26587`).
|
|
|
|
|
|
|
|
|
|
|
2016-06-14 09:25:36 -03:00
|
|
|
|
sqlite3
|
|
|
|
|
-------
|
|
|
|
|
|
2016-09-06 19:07:06 -03:00
|
|
|
|
:attr:`sqlite3.Cursor.lastrowid` now supports the ``REPLACE`` statement.
|
|
|
|
|
(Contributed by Alex LordThorsen in :issue:`16864`.)
|
2016-06-14 09:25:36 -03:00
|
|
|
|
|
|
|
|
|
|
2016-06-17 16:52:18 -03:00
|
|
|
|
socket
|
|
|
|
|
------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :func:`~socket.socket.ioctl` function now supports the
|
|
|
|
|
:data:`~socket.SIO_LOOPBACK_FAST_PATH` control code.
|
2016-06-17 16:52:18 -03:00
|
|
|
|
(Contributed by Daniel Stokes in :issue:`26536`.)
|
|
|
|
|
|
2016-08-23 22:12:40 -03:00
|
|
|
|
The :meth:`~socket.socket.getsockopt` constants ``SO_DOMAIN``,
|
|
|
|
|
``SO_PROTOCOL``, ``SO_PEERSEC``, and ``SO_PASSSEC`` are now supported.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`26907`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :meth:`~socket.socket.setsockopt` now supports the
|
|
|
|
|
``setsockopt(level, optname, None, optlen: int)`` form.
|
2016-11-21 09:38:59 -04:00
|
|
|
|
(Contributed by Christian Heimes in :issue:`27744`.)
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
2016-09-11 20:14:35 -03:00
|
|
|
|
The socket module now supports the address family
|
|
|
|
|
:data:`~socket.AF_ALG` to interface with Linux Kernel crypto API. ``ALG_*``,
|
|
|
|
|
``SOL_ALG`` and :meth:`~socket.socket.sendmsg_afalg` were added.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`27744` with support from
|
|
|
|
|
Victor Stinner.)
|
2016-06-17 16:52:18 -03:00
|
|
|
|
|
2017-01-23 07:30:00 -04:00
|
|
|
|
New Linux constants ``TCP_USER_TIMEOUT`` and ``TCP_CONGESTION`` were added.
|
2021-12-17 08:55:03 -04:00
|
|
|
|
(Contributed by Omar Sandoval, :issue:`26273`).
|
2017-01-23 07:30:00 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
2016-04-12 21:36:52 -03:00
|
|
|
|
socketserver
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
Servers based on the :mod:`socketserver` module, including those
|
|
|
|
|
defined in :mod:`http.server`, :mod:`xmlrpc.server` and
|
|
|
|
|
:mod:`wsgiref.simple_server`, now support the :term:`context manager`
|
|
|
|
|
protocol.
|
|
|
|
|
(Contributed by Aviv Palivoda in :issue:`26404`.)
|
|
|
|
|
|
2016-06-29 07:12:22 -03:00
|
|
|
|
The :attr:`~socketserver.StreamRequestHandler.wfile` attribute of
|
|
|
|
|
:class:`~socketserver.StreamRequestHandler` classes now implements
|
|
|
|
|
the :class:`io.BufferedIOBase` writable interface. In particular,
|
|
|
|
|
calling :meth:`~io.BufferedIOBase.write` is now guaranteed to send the
|
|
|
|
|
data in full. (Contributed by Martin Panter in :issue:`26721`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
2016-09-11 20:14:35 -03:00
|
|
|
|
ssl
|
|
|
|
|
---
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
:mod:`ssl` supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2.
|
2016-09-11 20:14:35 -03:00
|
|
|
|
(Contributed by Christian Heimes in :issue:`26470`.)
|
|
|
|
|
|
|
|
|
|
3DES has been removed from the default cipher suites and ChaCha20 Poly1305
|
2016-11-10 14:27:22 -04:00
|
|
|
|
cipher suites have been added.
|
2016-09-11 20:14:35 -03:00
|
|
|
|
(Contributed by Christian Heimes in :issue:`27850` and :issue:`27766`.)
|
|
|
|
|
|
|
|
|
|
:class:`~ssl.SSLContext` has better default configuration for options
|
|
|
|
|
and ciphers.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`28043`.)
|
|
|
|
|
|
|
|
|
|
SSL session can be copied from one client-side connection to another
|
2016-11-10 14:27:22 -04:00
|
|
|
|
with the new :class:`~ssl.SSLSession` class. TLS session resumption can
|
|
|
|
|
speed up the initial handshake, reduce latency and improve performance
|
2016-09-11 20:14:35 -03:00
|
|
|
|
(Contributed by Christian Heimes in :issue:`19500` based on a draft by
|
|
|
|
|
Alex Warhawk.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The new :meth:`~ssl.SSLContext.get_ciphers` method can be used to
|
|
|
|
|
get a list of enabled ciphers in order of cipher priority.
|
|
|
|
|
|
2016-09-11 20:14:35 -03:00
|
|
|
|
All constants and flags have been converted to :class:`~enum.IntEnum` and
|
|
|
|
|
:class:`~enum.IntFlags`.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`28025`.)
|
|
|
|
|
|
|
|
|
|
Server and client-side specific TLS protocols for :class:`~ssl.SSLContext`
|
|
|
|
|
were added.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`28085`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
|
|
|
|
statistics
|
|
|
|
|
----------
|
|
|
|
|
|
|
|
|
|
A new :func:`~statistics.harmonic_mean` function has been added.
|
|
|
|
|
(Contributed by Steven D'Aprano in :issue:`27181`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct
|
|
|
|
|
------
|
|
|
|
|
|
|
|
|
|
:mod:`struct` now supports IEEE 754 half-precision floats via the ``'e'``
|
|
|
|
|
format specifier.
|
|
|
|
|
(Contributed by Eli Stevens, Mark Dickinson in :issue:`11734`.)
|
|
|
|
|
|
|
|
|
|
|
2016-05-20 07:11:15 -03:00
|
|
|
|
subprocess
|
|
|
|
|
----------
|
|
|
|
|
|
|
|
|
|
:class:`subprocess.Popen` destructor now emits a :exc:`ResourceWarning` warning
|
|
|
|
|
if the child process is still running. Use the context manager protocol (``with
|
2016-11-21 09:38:59 -04:00
|
|
|
|
proc: ...``) or explicitly call the :meth:`~subprocess.Popen.wait` method to
|
|
|
|
|
read the exit status of the child process. (Contributed by Victor Stinner in
|
|
|
|
|
:issue:`26741`.)
|
2016-05-20 07:11:15 -03:00
|
|
|
|
|
2016-09-07 00:16:17 -03:00
|
|
|
|
The :class:`subprocess.Popen` constructor and all functions that pass arguments
|
|
|
|
|
through to it now accept *encoding* and *errors* arguments. Specifying either
|
|
|
|
|
of these will enable text mode for the *stdin*, *stdout* and *stderr* streams.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Steve Dower in :issue:`6135`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sys
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
The new :func:`~sys.getfilesystemencodeerrors` function returns the name of
|
|
|
|
|
the error mode used to convert between Unicode filenames and bytes filenames.
|
|
|
|
|
(Contributed by Steve Dower in :issue:`27781`.)
|
|
|
|
|
|
|
|
|
|
On Windows the return value of the :func:`~sys.getwindowsversion` function
|
|
|
|
|
now includes the *platform_version* field which contains the accurate major
|
|
|
|
|
version, minor version and build number of the current operating system,
|
|
|
|
|
rather than the version that is being emulated for the process
|
|
|
|
|
(Contributed by Steve Dower in :issue:`27932`.)
|
|
|
|
|
|
2016-05-20 07:11:15 -03:00
|
|
|
|
|
2015-11-28 13:24:52 -04:00
|
|
|
|
telnetlib
|
|
|
|
|
---------
|
|
|
|
|
|
|
|
|
|
:class:`~telnetlib.Telnet` is now a context manager (contributed by
|
|
|
|
|
Stéphane Wirtel in :issue:`25485`).
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
time
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
The :class:`~time.struct_time` attributes :attr:`tm_gmtoff` and
|
|
|
|
|
:attr:`tm_zone` are now available on all platforms.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timeit
|
|
|
|
|
------
|
|
|
|
|
|
|
|
|
|
The new :meth:`Timer.autorange() <timeit.Timer.autorange>` convenience
|
|
|
|
|
method has been added to call :meth:`Timer.timeit() <timeit.Timer.timeit>`
|
|
|
|
|
repeatedly so that the total run time is greater or equal to 200 milliseconds.
|
|
|
|
|
(Contributed by Steven D'Aprano in :issue:`6422`.)
|
|
|
|
|
|
|
|
|
|
:mod:`timeit` now warns when there is substantial (4x) variance
|
|
|
|
|
between best and worst times.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`23552`.)
|
|
|
|
|
|
|
|
|
|
|
2016-06-26 03:46:57 -03:00
|
|
|
|
tkinter
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Added methods :meth:`~tkinter.Variable.trace_add`,
|
|
|
|
|
:meth:`~tkinter.Variable.trace_remove` and :meth:`~tkinter.Variable.trace_info`
|
|
|
|
|
in the :class:`tkinter.Variable` class. They replace old methods
|
|
|
|
|
:meth:`~tkinter.Variable.trace_variable`, :meth:`~tkinter.Variable.trace`,
|
|
|
|
|
:meth:`~tkinter.Variable.trace_vdelete` and
|
|
|
|
|
:meth:`~tkinter.Variable.trace_vinfo` that use obsolete Tcl commands and might
|
|
|
|
|
not work in future versions of Tcl.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`22115`).
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
.. _whatsnew36-traceback:
|
2016-08-15 21:58:14 -03:00
|
|
|
|
|
2016-08-15 00:11:34 -03:00
|
|
|
|
traceback
|
|
|
|
|
---------
|
|
|
|
|
|
2016-08-15 21:58:14 -03:00
|
|
|
|
Both the traceback module and the interpreter's builtin exception display now
|
|
|
|
|
abbreviate long sequences of repeated lines in tracebacks as shown in the
|
|
|
|
|
following example::
|
|
|
|
|
|
|
|
|
|
>>> def f(): f()
|
|
|
|
|
...
|
|
|
|
|
>>> f()
|
|
|
|
|
Traceback (most recent call last):
|
|
|
|
|
File "<stdin>", line 1, in <module>
|
|
|
|
|
File "<stdin>", line 1, in f
|
|
|
|
|
File "<stdin>", line 1, in f
|
|
|
|
|
File "<stdin>", line 1, in f
|
|
|
|
|
[Previous line repeated 995 more times]
|
|
|
|
|
RecursionError: maximum recursion depth exceeded
|
|
|
|
|
|
2016-08-15 00:11:34 -03:00
|
|
|
|
(Contributed by Emanuel Barry in :issue:`26823`.)
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
tracemalloc
|
|
|
|
|
-----------
|
|
|
|
|
|
|
|
|
|
The :mod:`tracemalloc` module now supports tracing memory allocations in
|
|
|
|
|
multiple different address spaces.
|
|
|
|
|
|
|
|
|
|
The new :class:`~tracemalloc.DomainFilter` filter class has been added
|
|
|
|
|
to filter block traces by their address space (domain).
|
|
|
|
|
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`26588`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _whatsnew36-typing:
|
|
|
|
|
|
2016-04-08 16:15:27 -03:00
|
|
|
|
typing
|
|
|
|
|
------
|
|
|
|
|
|
2020-08-14 07:20:05 -03:00
|
|
|
|
Since the :mod:`typing` module is :term:`provisional <provisional API>`,
|
2017-01-20 11:13:23 -04:00
|
|
|
|
all changes introduced in Python 3.6 have also been
|
2016-11-10 14:27:22 -04:00
|
|
|
|
backported to Python 3.5.x.
|
|
|
|
|
|
2016-11-14 15:49:18 -04:00
|
|
|
|
The :mod:`typing` module has a much improved support for generic type
|
|
|
|
|
aliases. For example ``Dict[str, Tuple[S, T]]`` is now a valid
|
|
|
|
|
type annotation.
|
|
|
|
|
(Contributed by Guido van Rossum in `Github #195
|
|
|
|
|
<https://github.com/python/typing/pull/195>`_.)
|
|
|
|
|
|
2016-04-08 16:15:27 -03:00
|
|
|
|
The :class:`typing.ContextManager` class has been added for
|
|
|
|
|
representing :class:`contextlib.AbstractContextManager`.
|
|
|
|
|
(Contributed by Brett Cannon in :issue:`25609`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :class:`typing.Collection` class has been added for
|
|
|
|
|
representing :class:`collections.abc.Collection`.
|
|
|
|
|
(Contributed by Ivan Levkivskyi in :issue:`27598`.)
|
|
|
|
|
|
|
|
|
|
The :const:`typing.ClassVar` type construct has been added to
|
|
|
|
|
mark class variables. As introduced in :pep:`526`, a variable annotation
|
|
|
|
|
wrapped in ClassVar indicates that a given attribute is intended to be used as
|
|
|
|
|
a class variable and should not be set on instances of that class.
|
|
|
|
|
(Contributed by Ivan Levkivskyi in `Github #280
|
2018-01-19 20:25:37 -04:00
|
|
|
|
<https://github.com/python/typing/pull/280>`_.)
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
|
|
|
|
A new :const:`~typing.TYPE_CHECKING` constant that is assumed to be
|
2018-10-05 11:17:18 -03:00
|
|
|
|
``True`` by the static type checkers, but is ``False`` at runtime.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Guido van Rossum in `Github #230
|
|
|
|
|
<https://github.com/python/typing/issues/230>`_.)
|
|
|
|
|
|
|
|
|
|
A new :func:`~typing.NewType` helper function has been added to create
|
|
|
|
|
lightweight distinct types for annotations::
|
|
|
|
|
|
|
|
|
|
from typing import NewType
|
|
|
|
|
|
|
|
|
|
UserId = NewType('UserId', int)
|
|
|
|
|
some_id = UserId(524313)
|
|
|
|
|
|
|
|
|
|
The static type checker will treat the new type as if it were a subclass
|
|
|
|
|
of the original type. (Contributed by Ivan Levkivskyi in `Github #189
|
|
|
|
|
<https://github.com/python/typing/issues/189>`_.)
|
|
|
|
|
|
2016-04-08 16:15:27 -03:00
|
|
|
|
|
2016-09-15 03:53:47 -03:00
|
|
|
|
unicodedata
|
|
|
|
|
-----------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :mod:`unicodedata` module now uses data from `Unicode 9.0.0
|
2022-09-27 08:08:11 -03:00
|
|
|
|
<https://unicode.org/versions/Unicode9.0.0/>`_.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Benjamin Peterson.)
|
2016-09-15 03:53:47 -03:00
|
|
|
|
|
|
|
|
|
|
2016-03-11 17:17:48 -04:00
|
|
|
|
unittest.mock
|
|
|
|
|
-------------
|
|
|
|
|
|
|
|
|
|
The :class:`~unittest.mock.Mock` class has the following improvements:
|
|
|
|
|
|
|
|
|
|
* Two new methods, :meth:`Mock.assert_called()
|
|
|
|
|
<unittest.mock.Mock.assert_called>` and :meth:`Mock.assert_called_once()
|
|
|
|
|
<unittest.mock.Mock.assert_called_once>` to check if the mock object
|
|
|
|
|
was called.
|
|
|
|
|
(Contributed by Amit Saha in :issue:`26323`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The :meth:`Mock.reset_mock() <unittest.mock.Mock.reset_mock>` method
|
|
|
|
|
now has two optional keyword only arguments: *return_value* and
|
|
|
|
|
*side_effect*.
|
|
|
|
|
(Contributed by Kushal Das in :issue:`21271`.)
|
|
|
|
|
|
2016-03-11 17:17:48 -04:00
|
|
|
|
|
2016-08-24 03:33:33 -03:00
|
|
|
|
urllib.request
|
|
|
|
|
--------------
|
|
|
|
|
|
2016-08-26 22:39:26 -03:00
|
|
|
|
If a HTTP request has a file or iterable body (other than a
|
2016-11-10 14:27:22 -04:00
|
|
|
|
bytes object) but no ``Content-Length`` header, rather than
|
2016-08-24 03:33:33 -03:00
|
|
|
|
throwing an error, :class:`~urllib.request.AbstractHTTPHandler` now
|
|
|
|
|
falls back to use chunked transfer encoding.
|
|
|
|
|
(Contributed by Demian Brecht and Rolf Krahl in :issue:`12319`.)
|
|
|
|
|
|
|
|
|
|
|
2015-10-08 06:27:06 -03:00
|
|
|
|
urllib.robotparser
|
|
|
|
|
------------------
|
|
|
|
|
|
2015-11-13 21:29:17 -04:00
|
|
|
|
:class:`~urllib.robotparser.RobotFileParser` now supports the ``Crawl-delay`` and
|
2015-10-08 06:27:06 -03:00
|
|
|
|
``Request-rate`` extensions.
|
|
|
|
|
(Contributed by Nikolay Bogoychev in :issue:`16099`.)
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
venv
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
:mod:`venv` accepts a new parameter ``--prompt``. This parameter provides an
|
|
|
|
|
alternative prefix for the virtual environment. (Proposed by Łukasz Balcerzak
|
|
|
|
|
and ported to 3.6 by Stéphane Wirtel in :issue:`22829`.)
|
|
|
|
|
|
|
|
|
|
|
2016-03-18 21:03:51 -03:00
|
|
|
|
warnings
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
A new optional *source* parameter has been added to the
|
|
|
|
|
:func:`warnings.warn_explicit` function: the destroyed object which emitted a
|
|
|
|
|
:exc:`ResourceWarning`. A *source* attribute has also been added to
|
|
|
|
|
:class:`warnings.WarningMessage` (contributed by Victor Stinner in
|
|
|
|
|
:issue:`26568` and :issue:`26567`).
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
When a :exc:`ResourceWarning` warning is logged, the :mod:`tracemalloc` module is now
|
|
|
|
|
used to try to retrieve the traceback where the destroyed object was allocated.
|
2016-03-18 21:03:51 -03:00
|
|
|
|
|
|
|
|
|
Example with the script ``example.py``::
|
|
|
|
|
|
2016-03-19 06:33:25 -03:00
|
|
|
|
import warnings
|
|
|
|
|
|
2016-03-18 21:03:51 -03:00
|
|
|
|
def func():
|
2016-03-19 06:33:25 -03:00
|
|
|
|
return open(__file__)
|
2016-03-18 21:03:51 -03:00
|
|
|
|
|
2016-03-19 06:33:25 -03:00
|
|
|
|
f = func()
|
|
|
|
|
f = None
|
2016-03-18 21:03:51 -03:00
|
|
|
|
|
|
|
|
|
Output of the command ``python3.6 -Wd -X tracemalloc=5 example.py``::
|
|
|
|
|
|
2016-03-19 06:33:25 -03:00
|
|
|
|
example.py:7: ResourceWarning: unclosed file <_io.TextIOWrapper name='example.py' mode='r' encoding='UTF-8'>
|
2016-03-18 21:03:51 -03:00
|
|
|
|
f = None
|
|
|
|
|
Object allocated at (most recent call first):
|
2016-03-19 06:33:25 -03:00
|
|
|
|
File "example.py", lineno 4
|
|
|
|
|
return open(__file__)
|
|
|
|
|
File "example.py", lineno 6
|
|
|
|
|
f = func()
|
2016-03-18 21:03:51 -03:00
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
The "Object allocated at" traceback is new and is only displayed if
|
2016-03-19 06:33:25 -03:00
|
|
|
|
:mod:`tracemalloc` is tracing Python memory allocations and if the
|
2016-11-21 09:38:59 -04:00
|
|
|
|
:mod:`warnings` module was already imported.
|
2016-03-18 21:03:51 -03:00
|
|
|
|
|
|
|
|
|
|
2016-05-24 19:42:04 -03:00
|
|
|
|
winreg
|
|
|
|
|
------
|
|
|
|
|
|
2016-05-25 15:26:07 -03:00
|
|
|
|
Added the 64-bit integer type :data:`REG_QWORD <winreg.REG_QWORD>`.
|
2016-05-24 19:42:04 -03:00
|
|
|
|
(Contributed by Clement Rouault in :issue:`23026`.)
|
|
|
|
|
|
|
|
|
|
|
2016-09-06 18:32:43 -03:00
|
|
|
|
winsound
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
Allowed keyword arguments to be passed to :func:`Beep <winsound.Beep>`,
|
|
|
|
|
:func:`MessageBeep <winsound.MessageBeep>`, and :func:`PlaySound
|
|
|
|
|
<winsound.PlaySound>` (:issue:`27982`).
|
|
|
|
|
|
|
|
|
|
|
2016-09-11 05:23:38 -03:00
|
|
|
|
xmlrpc.client
|
|
|
|
|
-------------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :mod:`xmlrpc.client` module now supports unmarshalling
|
2016-11-21 09:38:59 -04:00
|
|
|
|
additional data types used by the Apache XML-RPC implementation
|
2016-11-10 14:27:22 -04:00
|
|
|
|
for numerics and ``None``.
|
2016-09-11 05:23:38 -03:00
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`26885`.)
|
|
|
|
|
|
|
|
|
|
|
2016-02-07 18:02:25 -04:00
|
|
|
|
zipfile
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
A new :meth:`ZipInfo.from_file() <zipfile.ZipInfo.from_file>` class method
|
2016-02-10 01:45:55 -04:00
|
|
|
|
allows making a :class:`~zipfile.ZipInfo` instance from a filesystem file.
|
2016-02-07 18:02:25 -04:00
|
|
|
|
A new :meth:`ZipInfo.is_dir() <zipfile.ZipInfo.is_dir>` method can be used
|
|
|
|
|
to check if the :class:`~zipfile.ZipInfo` instance represents a directory.
|
|
|
|
|
(Contributed by Thomas Kluyver in :issue:`26039`.)
|
|
|
|
|
|
2016-05-13 07:52:49 -03:00
|
|
|
|
The :meth:`ZipFile.open() <zipfile.ZipFile.open>` method can now be used to
|
|
|
|
|
write data into a ZIP file, as well as for extracting data.
|
|
|
|
|
(Contributed by Thomas Kluyver in :issue:`26039`.)
|
|
|
|
|
|
2016-02-07 18:02:25 -04:00
|
|
|
|
|
2016-02-10 06:06:36 -04:00
|
|
|
|
zlib
|
|
|
|
|
----
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The :func:`~zlib.compress` and :func:`~zlib.decompress` functions now accept
|
|
|
|
|
keyword arguments.
|
|
|
|
|
(Contributed by Aviv Palivoda in :issue:`26243` and
|
|
|
|
|
Xiang Zhang in :issue:`16764` respectively.)
|
2016-02-10 06:06:36 -04:00
|
|
|
|
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
Optimizations
|
|
|
|
|
=============
|
2016-04-27 17:13:46 -03:00
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
* The Python interpreter now uses a 16-bit wordcode instead of bytecode which
|
2016-11-10 14:27:22 -04:00
|
|
|
|
made a number of opcode optimizations possible.
|
|
|
|
|
(Contributed by Demur Rumed with input and reviews from
|
|
|
|
|
Serhiy Storchaka and Victor Stinner in :issue:`26647` and :issue:`28050`.)
|
2016-04-27 17:13:46 -03:00
|
|
|
|
|
2016-12-15 18:56:43 -04:00
|
|
|
|
* The :class:`asyncio.Future` class now has an optimized C implementation.
|
|
|
|
|
(Contributed by Yury Selivanov and INADA Naoki in :issue:`26081`.)
|
2016-04-27 17:13:46 -03:00
|
|
|
|
|
2016-12-15 18:56:43 -04:00
|
|
|
|
* The :class:`asyncio.Task` class now has an optimized
|
2016-11-10 14:27:22 -04:00
|
|
|
|
C implementation. (Contributed by Yury Selivanov in :issue:`28544`.)
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-14 15:49:18 -04:00
|
|
|
|
* Various implementation improvements in the :mod:`typing` module
|
|
|
|
|
(such as caching of generic types) allow up to 30 times performance
|
|
|
|
|
improvements and reduced memory footprint.
|
|
|
|
|
|
2015-11-13 21:29:17 -04:00
|
|
|
|
* The ASCII decoder is now up to 60 times as fast for error handlers
|
2015-10-14 05:10:00 -03:00
|
|
|
|
``surrogateescape``, ``ignore`` and ``replace`` (Contributed
|
|
|
|
|
by Victor Stinner in :issue:`24870`).
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2015-10-20 02:07:53 -03:00
|
|
|
|
* The ASCII and the Latin1 encoders are now up to 3 times as fast for the
|
2016-11-14 15:49:18 -04:00
|
|
|
|
error handler ``surrogateescape``
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`25227`).
|
2015-09-29 07:32:13 -03:00
|
|
|
|
|
2015-11-13 21:29:17 -04:00
|
|
|
|
* The UTF-8 encoder is now up to 75 times as fast for error handlers
|
2015-10-14 05:10:00 -03:00
|
|
|
|
``ignore``, ``replace``, ``surrogateescape``, ``surrogatepass`` (Contributed
|
|
|
|
|
by Victor Stinner in :issue:`25267`).
|
2015-10-01 16:54:51 -03:00
|
|
|
|
|
2015-11-13 21:29:17 -04:00
|
|
|
|
* The UTF-8 decoder is now up to 15 times as fast for error handlers
|
2015-10-14 05:10:00 -03:00
|
|
|
|
``ignore``, ``replace`` and ``surrogateescape`` (Contributed
|
|
|
|
|
by Victor Stinner in :issue:`25301`).
|
|
|
|
|
|
|
|
|
|
* ``bytes % args`` is now up to 2 times faster. (Contributed by Victor Stinner
|
|
|
|
|
in :issue:`25349`).
|
|
|
|
|
|
|
|
|
|
* ``bytearray % args`` is now between 2.5 and 5 times faster. (Contributed by
|
|
|
|
|
Victor Stinner in :issue:`25399`).
|
2015-10-05 08:43:50 -03:00
|
|
|
|
|
2015-10-14 06:25:33 -03:00
|
|
|
|
* Optimize :meth:`bytes.fromhex` and :meth:`bytearray.fromhex`: they are now
|
|
|
|
|
between 2x and 3.5x faster. (Contributed by Victor Stinner in :issue:`25401`).
|
|
|
|
|
|
2016-03-21 06:38:58 -03:00
|
|
|
|
* Optimize ``bytes.replace(b'', b'.')`` and ``bytearray.replace(b'', b'.')``:
|
|
|
|
|
up to 80% faster. (Contributed by Josh Snider in :issue:`26574`).
|
|
|
|
|
|
2016-04-24 17:33:26 -03:00
|
|
|
|
* Allocator functions of the :c:func:`PyMem_Malloc` domain
|
|
|
|
|
(:c:data:`PYMEM_DOMAIN_MEM`) now use the :ref:`pymalloc memory allocator
|
|
|
|
|
<pymalloc>` instead of :c:func:`malloc` function of the C library. The
|
|
|
|
|
pymalloc allocator is optimized for objects smaller or equal to 512 bytes
|
|
|
|
|
with a short lifetime, and use :c:func:`malloc` for larger memory blocks.
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`26249`).
|
|
|
|
|
|
2016-05-20 06:42:37 -03:00
|
|
|
|
* :func:`pickle.load` and :func:`pickle.loads` are now up to 10% faster when
|
|
|
|
|
deserializing many small objects (Contributed by Victor Stinner in
|
|
|
|
|
:issue:`27056`).
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
* Passing :term:`keyword arguments <keyword argument>` to a function has an
|
2016-08-14 04:52:18 -03:00
|
|
|
|
overhead in comparison with passing :term:`positional arguments
|
|
|
|
|
<positional argument>`. Now in extension functions implemented with using
|
|
|
|
|
Argument Clinic this overhead is significantly decreased.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`27574`).
|
|
|
|
|
|
2016-09-06 16:33:41 -03:00
|
|
|
|
* Optimized :func:`~glob.glob` and :func:`~glob.iglob` functions in the
|
|
|
|
|
:mod:`glob` module; they are now about 3--6 times faster.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`25596`).
|
|
|
|
|
|
2016-09-07 04:58:05 -03:00
|
|
|
|
* Optimized globbing in :mod:`pathlib` by using :func:`os.scandir`;
|
|
|
|
|
it is now about 1.5--4 times faster.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`26032`).
|
2016-08-14 04:52:18 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* :class:`xml.etree.ElementTree` parsing, iteration and deepcopy performance
|
|
|
|
|
has been significantly improved.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`25638`, :issue:`25873`,
|
|
|
|
|
and :issue:`25869`.)
|
|
|
|
|
|
|
|
|
|
* Creation of :class:`fractions.Fraction` instances from floats and
|
|
|
|
|
decimals is now 2 to 3 times faster.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`25971`.)
|
|
|
|
|
|
2016-11-07 17:40:20 -04:00
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
Build and C API Changes
|
|
|
|
|
=======================
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* Python now requires some C99 support in the toolchain to build.
|
|
|
|
|
Most notably, Python now uses standard integer types and macros in
|
|
|
|
|
place of custom macros like ``PY_LONG_LONG``.
|
|
|
|
|
For more information, see :pep:`7` and :issue:`17884`.
|
2016-09-08 14:27:20 -03:00
|
|
|
|
|
2016-09-13 13:04:15 -03:00
|
|
|
|
* Cross-compiling CPython with the Android NDK and the Android API level set to
|
2018-06-16 02:08:31 -03:00
|
|
|
|
21 (Android 5.0 Lollipop) or greater runs successfully. While Android is not
|
2016-09-13 13:04:15 -03:00
|
|
|
|
yet a supported platform, the Python test suite runs on the Android emulator
|
|
|
|
|
with only about 16 tests failures. See the Android meta-issue :issue:`26865`.
|
|
|
|
|
|
2016-11-21 04:12:40 -04:00
|
|
|
|
* The ``--enable-optimizations`` configure flag has been added. Turning it on
|
2016-11-03 20:20:00 -03:00
|
|
|
|
will activate expensive optimizations like PGO.
|
2017-01-11 07:56:22 -04:00
|
|
|
|
(Original patch by Alecsandru Patrascu of Intel in :issue:`26359`.)
|
2016-09-06 21:12:40 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The :term:`GIL <global interpreter lock>` must now be held when allocator
|
|
|
|
|
functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and
|
|
|
|
|
:c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called.
|
|
|
|
|
|
2015-11-29 23:18:29 -04:00
|
|
|
|
* New :c:func:`Py_FinalizeEx` API which indicates if flushing buffered data
|
2016-11-10 14:27:22 -04:00
|
|
|
|
failed.
|
|
|
|
|
(Contributed by Martin Panter in :issue:`5319`.)
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-06-09 10:30:29 -03:00
|
|
|
|
* :c:func:`PyArg_ParseTupleAndKeywords` now supports :ref:`positional-only
|
|
|
|
|
parameters <positional-only_parameter>`. Positional-only parameters are
|
|
|
|
|
defined by empty names.
|
2016-07-01 06:12:19 -03:00
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`26282`).
|
2016-06-09 10:30:29 -03:00
|
|
|
|
|
2016-08-15 00:11:34 -03:00
|
|
|
|
* ``PyTraceback_Print`` method now abbreviates long sequences of repeated lines
|
|
|
|
|
as ``"[Previous line repeated {count} more times]"``.
|
|
|
|
|
(Contributed by Emanuel Barry in :issue:`26823`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The new :c:func:`PyErr_SetImportErrorSubclass` function allows for
|
|
|
|
|
specifying a subclass of :exc:`ImportError` to raise.
|
|
|
|
|
(Contributed by Eric Snow in :issue:`15767`.)
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The new :c:func:`PyErr_ResourceWarning` function can be used to generate
|
2016-11-21 09:38:59 -04:00
|
|
|
|
a :exc:`ResourceWarning` providing the source of the resource allocation.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Victor Stinner in :issue:`26567`.)
|
|
|
|
|
|
|
|
|
|
* The new :c:func:`PyOS_FSPath` function returns the file system
|
|
|
|
|
representation of a :term:`path-like object`.
|
|
|
|
|
(Contributed by Brett Cannon in :issue:`27186`.)
|
|
|
|
|
|
|
|
|
|
* The :c:func:`PyUnicode_FSConverter` and :c:func:`PyUnicode_FSDecoder`
|
|
|
|
|
functions will now accept :term:`path-like objects <path-like object>`.
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-09-09 21:01:21 -03:00
|
|
|
|
|
2016-11-24 04:20:40 -04:00
|
|
|
|
Other Improvements
|
|
|
|
|
==================
|
|
|
|
|
|
|
|
|
|
* When :option:`--version` (short form: :option:`-V`) is supplied twice,
|
|
|
|
|
Python prints :data:`sys.version` for detailed information.
|
|
|
|
|
|
|
|
|
|
.. code-block:: shell-session
|
|
|
|
|
|
|
|
|
|
$ ./python -VV
|
|
|
|
|
Python 3.6.0b4+ (3.6:223967b49e49+, Nov 21 2016, 20:55:04)
|
|
|
|
|
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]
|
|
|
|
|
|
2016-09-09 21:01:21 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
Deprecated
|
|
|
|
|
==========
|
2016-09-09 21:01:21 -03:00
|
|
|
|
|
2015-05-28 18:10:29 -03:00
|
|
|
|
New Keywords
|
|
|
|
|
------------
|
|
|
|
|
|
2015-08-03 15:57:21 -03:00
|
|
|
|
``async`` and ``await`` are not recommended to be used as variable, class,
|
|
|
|
|
function or module names. Introduced by :pep:`492` in Python 3.5, they will
|
2016-11-10 14:27:22 -04:00
|
|
|
|
become proper keywords in Python 3.7. Starting in Python 3.6, the use of
|
|
|
|
|
``async`` or ``await`` as names will generate a :exc:`DeprecationWarning`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Deprecated Python behavior
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
Raising the :exc:`StopIteration` exception inside a generator will now
|
|
|
|
|
generate a :exc:`DeprecationWarning`, and will trigger a :exc:`RuntimeError`
|
|
|
|
|
in Python 3.7. See :ref:`whatsnew-pep-479` for details.
|
|
|
|
|
|
|
|
|
|
The :meth:`__aiter__` method is now expected to return an asynchronous
|
|
|
|
|
iterator directly instead of returning an awaitable as previously.
|
|
|
|
|
Doing the former will trigger a :exc:`DeprecationWarning`. Backward
|
|
|
|
|
compatibility will be removed in Python 3.7.
|
|
|
|
|
(Contributed by Yury Selivanov in :issue:`27243`.)
|
|
|
|
|
|
|
|
|
|
A backslash-character pair that is not a valid escape sequence now generates
|
|
|
|
|
a :exc:`DeprecationWarning`. Although this will eventually become a
|
|
|
|
|
:exc:`SyntaxError`, that will not be for several Python releases.
|
|
|
|
|
(Contributed by Emanuel Barry in :issue:`27364`.)
|
|
|
|
|
|
|
|
|
|
When performing a relative import, falling back on ``__name__`` and
|
|
|
|
|
``__path__`` from the calling module when ``__spec__`` or
|
|
|
|
|
``__package__`` are not defined now raises an :exc:`ImportWarning`.
|
|
|
|
|
(Contributed by Rose Ames in :issue:`25791`.)
|
2015-05-28 18:10:29 -03:00
|
|
|
|
|
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
Deprecated Python modules, functions and methods
|
|
|
|
|
------------------------------------------------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
asynchat
|
|
|
|
|
~~~~~~~~
|
|
|
|
|
|
|
|
|
|
The :mod:`asynchat` has been deprecated in favor of :mod:`asyncio`.
|
|
|
|
|
(Contributed by Mariatta in :issue:`25002`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
asyncore
|
|
|
|
|
~~~~~~~~
|
|
|
|
|
|
|
|
|
|
The :mod:`asyncore` has been deprecated in favor of :mod:`asyncio`.
|
|
|
|
|
(Contributed by Mariatta in :issue:`25002`.)
|
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
dbm
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
Unlike other :mod:`dbm` implementations, the :mod:`dbm.dumb` module
|
|
|
|
|
creates databases with the ``'rw'`` mode and allows modifying the database
|
|
|
|
|
opened with the ``'r'`` mode. This behavior is now deprecated and will
|
|
|
|
|
be removed in 3.8.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`21708`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
distutils
|
|
|
|
|
~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
The undocumented ``extra_path`` argument to the
|
2022-07-25 07:20:09 -03:00
|
|
|
|
``distutils.Distribution`` constructor is now considered deprecated
|
2016-11-10 14:27:22 -04:00
|
|
|
|
and will raise a warning if set. Support for this parameter will be
|
|
|
|
|
removed in a future Python release. See :issue:`27919` for details.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
grp
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
The support of non-integer arguments in :func:`~grp.getgrgid` has been
|
|
|
|
|
deprecated.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`26129`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
importlib
|
|
|
|
|
~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
The :meth:`importlib.machinery.SourceFileLoader.load_module` and
|
|
|
|
|
:meth:`importlib.machinery.SourcelessFileLoader.load_module` methods
|
|
|
|
|
are now deprecated. They were the only remaining implementations of
|
|
|
|
|
:meth:`importlib.abc.Loader.load_module` in :mod:`importlib` that had not
|
|
|
|
|
been deprecated in previous versions of Python in favour of
|
|
|
|
|
:meth:`importlib.abc.Loader.exec_module`.
|
|
|
|
|
|
2016-12-07 17:02:27 -04:00
|
|
|
|
The :class:`importlib.machinery.WindowsRegistryFinder` class is now
|
|
|
|
|
deprecated. As of 3.6.0, it is still added to :attr:`sys.meta_path` by
|
|
|
|
|
default (on Windows), but this may change in future releases.
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
os
|
|
|
|
|
~~
|
|
|
|
|
|
|
|
|
|
Undocumented support of general :term:`bytes-like objects <bytes-like object>`
|
|
|
|
|
as paths in :mod:`os` functions, :func:`compile` and similar functions is
|
|
|
|
|
now deprecated.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`25791` and :issue:`26754`.)
|
|
|
|
|
|
|
|
|
|
re
|
|
|
|
|
~~
|
|
|
|
|
|
|
|
|
|
Support for inline flags ``(?letters)`` in the middle of the regular
|
|
|
|
|
expression has been deprecated and will be removed in a future Python
|
|
|
|
|
version. Flags at the start of a regular expression are still allowed.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`22493`.)
|
|
|
|
|
|
|
|
|
|
ssl
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
|
|
|
|
|
In the future the :mod:`ssl` module will require at least OpenSSL 1.0.2 or
|
|
|
|
|
1.1.0.
|
|
|
|
|
|
|
|
|
|
SSL-related arguments like ``certfile``, ``keyfile`` and ``check_hostname``
|
|
|
|
|
in :mod:`ftplib`, :mod:`http.client`, :mod:`imaplib`, :mod:`poplib`,
|
|
|
|
|
and :mod:`smtplib` have been deprecated in favor of ``context``.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`28022`.)
|
|
|
|
|
|
|
|
|
|
A couple of protocols and functions of the :mod:`ssl` module are now
|
|
|
|
|
deprecated. Some features will no longer be available in future versions
|
|
|
|
|
of OpenSSL. Other features are deprecated in favor of a different API.
|
|
|
|
|
(Contributed by Christian Heimes in :issue:`28022` and :issue:`26470`.)
|
|
|
|
|
|
|
|
|
|
tkinter
|
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
|
|
The :mod:`tkinter.tix` module is now deprecated. :mod:`tkinter` users
|
|
|
|
|
should use :mod:`tkinter.ttk` instead.
|
|
|
|
|
|
2022-10-26 00:26:28 -03:00
|
|
|
|
.. _whatsnew36-venv:
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
venv
|
|
|
|
|
~~~~
|
|
|
|
|
|
|
|
|
|
The ``pyvenv`` script has been deprecated in favour of ``python3 -m venv``.
|
|
|
|
|
This prevents confusion as to what Python interpreter ``pyvenv`` is
|
|
|
|
|
connected to and thus what Python interpreter will be used by the virtual
|
|
|
|
|
environment. (Contributed by Brett Cannon in :issue:`25154`.)
|
2016-09-09 17:25:44 -03:00
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
|
|
|
|
Deprecated functions and types of the C API
|
|
|
|
|
-------------------------------------------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
Undocumented functions :c:func:`PyUnicode_AsEncodedObject`,
|
|
|
|
|
:c:func:`PyUnicode_AsDecodedObject`, :c:func:`PyUnicode_AsEncodedUnicode`
|
|
|
|
|
and :c:func:`PyUnicode_AsDecodedUnicode` are deprecated now.
|
2016-11-21 09:38:59 -04:00
|
|
|
|
Use the :ref:`generic codec based API <codec-registry>` instead.
|
2016-09-11 20:14:35 -03:00
|
|
|
|
|
2016-08-06 17:22:08 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
Deprecated Build Options
|
|
|
|
|
------------------------
|
2016-02-10 00:40:48 -04:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
The ``--with-system-ffi`` configure flag is now on by default on non-macOS
|
|
|
|
|
UNIX platforms. It may be disabled by using ``--without-system-ffi``, but
|
|
|
|
|
using the flag is deprecated and will not be accepted in Python 3.7.
|
|
|
|
|
macOS is unaffected by this change. Note that many OS distributors already
|
|
|
|
|
use the ``--with-system-ffi`` flag when building their system Python.
|
2016-02-10 00:40:48 -04:00
|
|
|
|
|
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
Removed
|
|
|
|
|
=======
|
|
|
|
|
|
|
|
|
|
API and Feature Removals
|
|
|
|
|
------------------------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* Unknown escapes consisting of ``'\'`` and an ASCII letter in
|
2016-12-06 13:15:29 -04:00
|
|
|
|
regular expressions will now cause an error. In replacement templates for
|
|
|
|
|
:func:`re.sub` they are still allowed, but deprecated.
|
|
|
|
|
The :const:`re.LOCALE` flag can now only be used with binary patterns.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
|
2015-07-23 11:51:34 -03:00
|
|
|
|
* ``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3).
|
2015-07-23 11:49:00 -03:00
|
|
|
|
:func:`inspect.getmodulename` should be used for obtaining the module
|
|
|
|
|
name for a given path.
|
2016-11-10 14:27:22 -04:00
|
|
|
|
(Contributed by Yury Selivanov in :issue:`13248`.)
|
2015-07-23 11:49:00 -03:00
|
|
|
|
|
2016-01-18 00:12:16 -04:00
|
|
|
|
* ``traceback.Ignore`` class and ``traceback.usage``, ``traceback.modname``,
|
|
|
|
|
``traceback.fullmodname``, ``traceback.find_lines_from_code``,
|
|
|
|
|
``traceback.find_lines``, ``traceback.find_strings``,
|
|
|
|
|
``traceback.find_executable_lines`` methods were removed from the
|
|
|
|
|
:mod:`traceback` module. They were undocumented methods deprecated since
|
|
|
|
|
Python 3.2 and equivalent functionality is available from private methods.
|
|
|
|
|
|
2016-05-16 16:35:46 -03:00
|
|
|
|
* The ``tk_menuBar()`` and ``tk_bindForTraversal()`` dummy methods in
|
|
|
|
|
:mod:`tkinter` widget classes were removed (corresponding Tk commands
|
|
|
|
|
were obsolete since Tk 4.0).
|
|
|
|
|
|
2016-06-11 13:32:44 -03:00
|
|
|
|
* The :meth:`~zipfile.ZipFile.open` method of the :class:`zipfile.ZipFile`
|
|
|
|
|
class no longer supports the ``'U'`` mode (was deprecated since Python 3.4).
|
|
|
|
|
Use :class:`io.TextIOWrapper` for reading compressed text files in
|
|
|
|
|
:term:`universal newlines` mode.
|
|
|
|
|
|
2016-09-08 15:38:46 -03:00
|
|
|
|
* The undocumented ``IN``, ``CDROM``, ``DLFCN``, ``TYPES``, ``CDIO``, and
|
|
|
|
|
``STROPTS`` modules have been removed. They had been available in the
|
|
|
|
|
platform specific ``Lib/plat-*/`` directories, but were chronically out of
|
|
|
|
|
date, inconsistently available across platforms, and unmaintained. The
|
|
|
|
|
script that created these modules is still available in the source
|
2022-06-21 15:55:18 -03:00
|
|
|
|
distribution at `Tools/scripts/h2py.py
|
|
|
|
|
<https://github.com/python/cpython/blob/v3.6.15/Tools/scripts/h2py.py>`_.
|
2016-09-08 15:38:46 -03:00
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* The deprecated ``asynchat.fifo`` class has been removed.
|
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
|
|
|
|
Porting to Python 3.6
|
|
|
|
|
=====================
|
|
|
|
|
|
|
|
|
|
This section lists previously described changes and other bugfixes
|
|
|
|
|
that may require changes to your code.
|
|
|
|
|
|
2016-07-03 15:03:53 -03:00
|
|
|
|
Changes in 'python' Command Behavior
|
|
|
|
|
------------------------------------
|
|
|
|
|
|
|
|
|
|
* The output of a special Python build with defined ``COUNT_ALLOCS``,
|
|
|
|
|
``SHOW_ALLOC_COUNT`` or ``SHOW_TRACK_COUNT`` macros is now off by
|
|
|
|
|
default. It can be re-enabled using the ``-X showalloccount`` option.
|
|
|
|
|
It now outputs to ``stderr`` instead of ``stdout``.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`23034`.)
|
|
|
|
|
|
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
Changes in the Python API
|
|
|
|
|
-------------------------
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* :func:`open() <open>` will no longer allow combining the ``'U'`` mode flag
|
|
|
|
|
with ``'+'``.
|
|
|
|
|
(Contributed by Jeff Balogh and John O'Connor in :issue:`2091`.)
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
* :mod:`sqlite3` no longer implicitly commits an open transaction before DDL
|
2016-09-11 06:57:15 -03:00
|
|
|
|
statements.
|
|
|
|
|
|
2016-09-06 20:33:52 -03:00
|
|
|
|
* On Linux, :func:`os.urandom` now blocks until the system urandom entropy pool
|
|
|
|
|
is initialized to increase the security.
|
|
|
|
|
|
2016-06-25 14:58:17 -03:00
|
|
|
|
* When :meth:`importlib.abc.Loader.exec_module` is defined,
|
|
|
|
|
:meth:`importlib.abc.Loader.create_module` must also be defined.
|
|
|
|
|
|
2016-09-07 20:56:15 -03:00
|
|
|
|
* :c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg**
|
|
|
|
|
argument is not set. Previously only ``NULL`` was returned.
|
|
|
|
|
|
2016-01-20 07:16:21 -04:00
|
|
|
|
* The format of the ``co_lnotab`` attribute of code objects changed to support
|
2016-11-21 09:38:59 -04:00
|
|
|
|
a negative line number delta. By default, Python does not emit bytecode with
|
|
|
|
|
a negative line number delta. Functions using ``frame.f_lineno``,
|
2016-01-20 07:16:21 -04:00
|
|
|
|
``PyFrame_GetLineNumber()`` or ``PyCode_Addr2Line()`` are not affected.
|
2016-11-21 09:38:59 -04:00
|
|
|
|
Functions directly decoding ``co_lnotab`` should be updated to use a signed
|
|
|
|
|
8-bit integer type for the line number delta, but this is only required to
|
|
|
|
|
support applications using a negative line number delta. See
|
2016-01-20 07:16:21 -04:00
|
|
|
|
``Objects/lnotab_notes.txt`` for the ``co_lnotab`` format and how to decode
|
|
|
|
|
it, and see the :pep:`511` for the rationale.
|
|
|
|
|
|
2015-12-27 17:17:04 -04:00
|
|
|
|
* The functions in the :mod:`compileall` module now return booleans instead
|
|
|
|
|
of ``1`` or ``0`` to represent success or failure, respectively. Thanks to
|
|
|
|
|
booleans being a subclass of integers, this should only be an issue if you
|
|
|
|
|
were doing identity checks for ``1`` or ``0``. See :issue:`25768`.
|
|
|
|
|
|
2015-08-09 18:53:30 -03:00
|
|
|
|
* Reading the :attr:`~urllib.parse.SplitResult.port` attribute of
|
|
|
|
|
:func:`urllib.parse.urlsplit` and :func:`~urllib.parse.urlparse` results
|
|
|
|
|
now raises :exc:`ValueError` for out-of-range values, rather than
|
|
|
|
|
returning :const:`None`. See :issue:`20059`.
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2015-10-16 16:21:37 -03:00
|
|
|
|
* The :mod:`imp` module now raises a :exc:`DeprecationWarning` instead of
|
|
|
|
|
:exc:`PendingDeprecationWarning`.
|
|
|
|
|
|
2015-11-14 08:52:08 -04:00
|
|
|
|
* The following modules have had missing APIs added to their :attr:`__all__`
|
2016-06-05 23:09:08 -03:00
|
|
|
|
attributes to match the documented APIs:
|
|
|
|
|
:mod:`calendar`, :mod:`cgi`, :mod:`csv`,
|
2016-04-01 03:55:55 -03:00
|
|
|
|
:mod:`~xml.etree.ElementTree`, :mod:`enum`,
|
2016-06-05 23:09:08 -03:00
|
|
|
|
:mod:`fileinput`, :mod:`ftplib`, :mod:`logging`, :mod:`mailbox`,
|
|
|
|
|
:mod:`mimetypes`, :mod:`optparse`, :mod:`plistlib`, :mod:`smtpd`,
|
|
|
|
|
:mod:`subprocess`, :mod:`tarfile`, :mod:`threading` and
|
2015-11-14 08:52:08 -04:00
|
|
|
|
:mod:`wave`. This means they will export new symbols when ``import *``
|
2016-11-10 14:27:22 -04:00
|
|
|
|
is used.
|
|
|
|
|
(Contributed by Joel Taddei and Jacek Kołodziej in :issue:`23883`.)
|
2015-11-14 08:52:08 -04:00
|
|
|
|
|
2016-01-22 19:25:50 -04:00
|
|
|
|
* When performing a relative import, if ``__package__`` does not compare equal
|
|
|
|
|
to ``__spec__.parent`` then :exc:`ImportWarning` is raised.
|
|
|
|
|
(Contributed by Brett Cannon in :issue:`25791`.)
|
2016-01-15 17:33:03 -04:00
|
|
|
|
|
2016-01-22 20:39:02 -04:00
|
|
|
|
* When a relative import is performed and no parent package is known, then
|
|
|
|
|
:exc:`ImportError` will be raised. Previously, :exc:`SystemError` could be
|
2016-02-21 04:49:56 -04:00
|
|
|
|
raised. (Contributed by Brett Cannon in :issue:`18018`.)
|
|
|
|
|
|
|
|
|
|
* Servers based on the :mod:`socketserver` module, including those
|
|
|
|
|
defined in :mod:`http.server`, :mod:`xmlrpc.server` and
|
|
|
|
|
:mod:`wsgiref.simple_server`, now only catch exceptions derived
|
|
|
|
|
from :exc:`Exception`. Therefore if a request handler raises
|
|
|
|
|
an exception like :exc:`SystemExit` or :exc:`KeyboardInterrupt`,
|
|
|
|
|
:meth:`~socketserver.BaseServer.handle_error` is no longer called, and
|
|
|
|
|
the exception will stop a single-threaded server. (Contributed by
|
|
|
|
|
Martin Panter in :issue:`23430`.)
|
2016-01-22 20:39:02 -04:00
|
|
|
|
|
2016-03-19 06:44:17 -03:00
|
|
|
|
* :func:`spwd.getspnam` now raises a :exc:`PermissionError` instead of
|
|
|
|
|
:exc:`KeyError` if the user doesn't have privileges.
|
2015-05-27 23:09:10 -03:00
|
|
|
|
|
2016-04-10 21:38:12 -03:00
|
|
|
|
* The :meth:`socket.socket.close` method now raises an exception if
|
2016-11-10 14:27:22 -04:00
|
|
|
|
an error (e.g. ``EBADF``) was reported by the underlying system call.
|
|
|
|
|
(Contributed by Martin Panter in :issue:`26685`.)
|
2016-04-10 21:38:12 -03:00
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
* The *decode_data* argument for the :class:`smtpd.SMTPChannel` and
|
2016-05-29 17:43:24 -03:00
|
|
|
|
:class:`smtpd.SMTPServer` constructors is now ``False`` by default.
|
|
|
|
|
This means that the argument passed to
|
|
|
|
|
:meth:`~smtpd.SMTPServer.process_message` is now a bytes object by
|
|
|
|
|
default, and ``process_message()`` will be passed keyword arguments.
|
|
|
|
|
Code that has already been updated in accordance with the deprecation
|
|
|
|
|
warning generated by 3.5 will not be affected.
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* All optional arguments of the :func:`~json.dump`, :func:`~json.dumps`,
|
2016-06-21 18:03:20 -03:00
|
|
|
|
:func:`~json.load` and :func:`~json.loads` functions and
|
|
|
|
|
:class:`~json.JSONEncoder` and :class:`~json.JSONDecoder` class
|
|
|
|
|
constructors in the :mod:`json` module are now :ref:`keyword-only
|
|
|
|
|
<keyword-only_parameter>`.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`18726`.)
|
|
|
|
|
|
2016-11-10 14:27:22 -04:00
|
|
|
|
* Subclasses of :class:`type` which don't override ``type.__new__`` may no
|
|
|
|
|
longer use the one-argument form to get the type of an object.
|
|
|
|
|
|
2016-07-30 23:42:49 -03:00
|
|
|
|
* As part of :pep:`487`, the handling of keyword arguments passed to
|
|
|
|
|
:class:`type` (other than the metaclass hint, ``metaclass``) is now
|
|
|
|
|
consistently delegated to :meth:`object.__init_subclass__`. This means that
|
|
|
|
|
:meth:`type.__new__` and :meth:`type.__init__` both now accept arbitrary
|
|
|
|
|
keyword arguments, but :meth:`object.__init_subclass__` (which is called from
|
|
|
|
|
:meth:`type.__new__`) will reject them by default. Custom metaclasses
|
|
|
|
|
accepting additional keyword arguments will need to adjust their calls to
|
|
|
|
|
:meth:`type.__new__` (whether direct or via :class:`super`) accordingly.
|
|
|
|
|
|
2022-07-25 07:20:09 -03:00
|
|
|
|
* In ``distutils.command.sdist.sdist``, the ``default_format``
|
2016-08-21 17:09:27 -03:00
|
|
|
|
attribute has been removed and is no longer honored. Instead, the
|
|
|
|
|
gzipped tarfile format is the default on all platforms and no
|
|
|
|
|
platform-specific selection is made.
|
|
|
|
|
In environments where distributions are
|
|
|
|
|
built on Windows and zip distributions are required, configure
|
2018-04-08 13:18:04 -03:00
|
|
|
|
the project with a ``setup.cfg`` file containing the following:
|
|
|
|
|
|
|
|
|
|
.. code-block:: ini
|
2016-08-21 17:09:27 -03:00
|
|
|
|
|
|
|
|
|
[sdist]
|
|
|
|
|
formats=zip
|
|
|
|
|
|
|
|
|
|
This behavior has also been backported to earlier Python versions
|
|
|
|
|
by Setuptools 26.0.0.
|
2016-06-21 18:03:20 -03:00
|
|
|
|
|
2016-08-26 22:39:26 -03:00
|
|
|
|
* In the :mod:`urllib.request` module and the
|
|
|
|
|
:meth:`http.client.HTTPConnection.request` method, if no Content-Length
|
|
|
|
|
header field has been specified and the request body is a file object,
|
|
|
|
|
it is now sent with HTTP 1.1 chunked encoding. If a file object has to
|
|
|
|
|
be sent to a HTTP 1.0 server, the Content-Length value now has to be
|
2016-11-10 14:27:22 -04:00
|
|
|
|
specified by the caller.
|
|
|
|
|
(Contributed by Demian Brecht and Rolf Krahl with tweaks from
|
|
|
|
|
Martin Panter in :issue:`12319`.)
|
|
|
|
|
|
|
|
|
|
* The :class:`~csv.DictReader` now returns rows of type
|
|
|
|
|
:class:`~collections.OrderedDict`.
|
|
|
|
|
(Contributed by Steve Holden in :issue:`27842`.)
|
|
|
|
|
|
|
|
|
|
* The :const:`crypt.METHOD_CRYPT` will no longer be added to ``crypt.methods``
|
|
|
|
|
if unsupported by the platform.
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`25287`.)
|
|
|
|
|
|
|
|
|
|
* The *verbose* and *rename* arguments for
|
|
|
|
|
:func:`~collections.namedtuple` are now keyword-only.
|
|
|
|
|
(Contributed by Raymond Hettinger in :issue:`25628`.)
|
|
|
|
|
|
|
|
|
|
* On Linux, :func:`ctypes.util.find_library` now looks in
|
|
|
|
|
``LD_LIBRARY_PATH`` for shared libraries.
|
|
|
|
|
(Contributed by Vinay Sajip in :issue:`9998`.)
|
|
|
|
|
|
|
|
|
|
* The :class:`imaplib.IMAP4` class now handles flags containing the
|
|
|
|
|
``']'`` character in messages sent from the server to improve
|
|
|
|
|
real-world compatibility.
|
|
|
|
|
(Contributed by Lita Cho in :issue:`21815`.)
|
|
|
|
|
|
|
|
|
|
* The :func:`mmap.write() <mmap.write>` function now returns the number
|
|
|
|
|
of bytes written like other write methods.
|
|
|
|
|
(Contributed by Jakub Stasiak in :issue:`26335`.)
|
|
|
|
|
|
|
|
|
|
* The :func:`pkgutil.iter_modules` and :func:`pkgutil.walk_packages`
|
|
|
|
|
functions now return :class:`~pkgutil.ModuleInfo` named tuples.
|
|
|
|
|
(Contributed by Ramchandra Apte in :issue:`17211`.)
|
|
|
|
|
|
|
|
|
|
* :func:`re.sub` now raises an error for invalid numerical group
|
2016-11-21 09:38:59 -04:00
|
|
|
|
references in replacement templates even if the pattern is not
|
|
|
|
|
found in the string. The error message for invalid group references
|
2016-11-10 14:27:22 -04:00
|
|
|
|
now includes the group index and the position of the reference.
|
|
|
|
|
(Contributed by SilentGhost, Serhiy Storchaka in :issue:`25953`.)
|
|
|
|
|
|
|
|
|
|
* :class:`zipfile.ZipFile` will now raise :exc:`NotImplementedError` for
|
|
|
|
|
unrecognized compression values. Previously a plain :exc:`RuntimeError`
|
2016-11-21 09:38:59 -04:00
|
|
|
|
was raised. Additionally, calling :class:`~zipfile.ZipFile` methods
|
|
|
|
|
on a closed ZipFile or calling the :meth:`~zipfile.ZipFile.write` method
|
2016-11-10 14:27:22 -04:00
|
|
|
|
on a ZipFile created with mode ``'r'`` will raise a :exc:`ValueError`.
|
|
|
|
|
Previously, a :exc:`RuntimeError` was raised in those scenarios.
|
|
|
|
|
|
2016-12-05 02:47:55 -04:00
|
|
|
|
* when custom metaclasses are combined with zero-argument :func:`super` or
|
|
|
|
|
direct references from methods to the implicit ``__class__`` closure
|
|
|
|
|
variable, the implicit ``__classcell__`` namespace entry must now be passed
|
|
|
|
|
up to ``type.__new__`` for initialisation. Failing to do so will result in
|
2018-05-20 02:13:52 -03:00
|
|
|
|
a :exc:`DeprecationWarning` in Python 3.6 and a :exc:`RuntimeError` in
|
|
|
|
|
Python 3.8.
|
2016-08-26 22:39:26 -03:00
|
|
|
|
|
2019-01-17 06:41:29 -04:00
|
|
|
|
* With the introduction of :exc:`ModuleNotFoundError`, import system consumers
|
|
|
|
|
may start expecting import system replacements to raise that more specific
|
|
|
|
|
exception when appropriate, rather than the less-specific :exc:`ImportError`.
|
|
|
|
|
To provide future compatibility with such consumers, implementors of
|
|
|
|
|
alternative import systems that completely replace :func:`__import__` will
|
|
|
|
|
need to update their implementations to raise the new subclass when a module
|
|
|
|
|
can't be found at all. Implementors of compliant plugins to the default
|
|
|
|
|
import system shouldn't need to make any changes, as the default import
|
|
|
|
|
system will raise the new subclass when appropriate.
|
|
|
|
|
|
|
|
|
|
|
2015-05-27 23:09:10 -03:00
|
|
|
|
Changes in the C API
|
|
|
|
|
--------------------
|
|
|
|
|
|
2016-11-21 09:38:59 -04:00
|
|
|
|
* The :c:func:`PyMem_Malloc` allocator family now uses the :ref:`pymalloc allocator
|
|
|
|
|
<pymalloc>` rather than the system :c:func:`malloc`. Applications calling
|
2016-04-22 11:26:23 -03:00
|
|
|
|
:c:func:`PyMem_Malloc` without holding the GIL can now crash. Set the
|
|
|
|
|
:envvar:`PYTHONMALLOC` environment variable to ``debug`` to validate the
|
|
|
|
|
usage of memory allocators in your application. See :issue:`26249`.
|
|
|
|
|
|
2015-11-29 23:18:29 -04:00
|
|
|
|
* :c:func:`Py_Exit` (and the main interpreter) now override the exit status
|
|
|
|
|
with 120 if flushing buffered data failed. See :issue:`5319`.
|
2016-11-28 12:45:36 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CPython bytecode changes
|
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
|
|
There have been several major changes to the :term:`bytecode` in Python 3.6.
|
|
|
|
|
|
|
|
|
|
* The Python interpreter now uses a 16-bit wordcode instead of bytecode.
|
|
|
|
|
(Contributed by Demur Rumed with input and reviews from
|
|
|
|
|
Serhiy Storchaka and Victor Stinner in :issue:`26647` and :issue:`28050`.)
|
|
|
|
|
|
|
|
|
|
* The new :opcode:`FORMAT_VALUE` and :opcode:`BUILD_STRING` opcodes as part
|
|
|
|
|
of the :ref:`formatted string literal <whatsnew36-pep498>` implementation.
|
|
|
|
|
(Contributed by Eric Smith in :issue:`25483` and
|
|
|
|
|
Serhiy Storchaka in :issue:`27078`.)
|
|
|
|
|
|
|
|
|
|
* The new :opcode:`BUILD_CONST_KEY_MAP` opcode to optimize the creation
|
|
|
|
|
of dictionaries with constant keys.
|
|
|
|
|
(Contributed by Serhiy Storchaka in :issue:`27140`.)
|
|
|
|
|
|
|
|
|
|
* The function call opcodes have been heavily reworked for better performance
|
|
|
|
|
and simpler implementation.
|
|
|
|
|
The :opcode:`MAKE_FUNCTION`, :opcode:`CALL_FUNCTION`,
|
|
|
|
|
:opcode:`CALL_FUNCTION_KW` and :opcode:`BUILD_MAP_UNPACK_WITH_CALL` opcodes
|
|
|
|
|
have been modified, the new :opcode:`CALL_FUNCTION_EX` and
|
|
|
|
|
:opcode:`BUILD_TUPLE_UNPACK_WITH_CALL` have been added, and
|
|
|
|
|
``CALL_FUNCTION_VAR``, ``CALL_FUNCTION_VAR_KW`` and ``MAKE_CLOSURE`` opcodes
|
|
|
|
|
have been removed.
|
|
|
|
|
(Contributed by Demur Rumed in :issue:`27095`, and Serhiy Storchaka in
|
|
|
|
|
:issue:`27213`, :issue:`28257`.)
|
|
|
|
|
|
|
|
|
|
* The new :opcode:`SETUP_ANNOTATIONS` and :opcode:`STORE_ANNOTATION` opcodes
|
|
|
|
|
have been added to support the new :term:`variable annotation` syntax.
|
|
|
|
|
(Contributed by Ivan Levkivskyi in :issue:`27985`.)
|
2018-06-11 05:09:34 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notable changes in Python 3.6.2
|
|
|
|
|
===============================
|
|
|
|
|
|
|
|
|
|
New ``make regen-all`` build target
|
|
|
|
|
-----------------------------------
|
|
|
|
|
|
|
|
|
|
To simplify cross-compilation, and to ensure that CPython can reliably be
|
|
|
|
|
compiled without requiring an existing version of Python to already be
|
|
|
|
|
available, the autotools-based build system no longer attempts to implicitly
|
|
|
|
|
recompile generated files based on file modification times.
|
|
|
|
|
|
|
|
|
|
Instead, a new ``make regen-all`` command has been added to force regeneration
|
|
|
|
|
of these files when desired (e.g. after an initial version of Python has
|
|
|
|
|
already been built based on the pregenerated versions).
|
|
|
|
|
|
|
|
|
|
More selective regeneration targets are also defined - see
|
|
|
|
|
:source:`Makefile.pre.in` for details.
|
|
|
|
|
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`23404`.)
|
|
|
|
|
|
|
|
|
|
.. versionadded:: 3.6.2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Removal of ``make touch`` build target
|
|
|
|
|
--------------------------------------
|
|
|
|
|
|
|
|
|
|
The ``make touch`` build target previously used to request implicit regeneration
|
|
|
|
|
of generated files by updating their modification times has been removed.
|
|
|
|
|
|
|
|
|
|
It has been replaced by the new ``make regen-all`` target.
|
|
|
|
|
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`23404`.)
|
|
|
|
|
|
|
|
|
|
.. versionchanged:: 3.6.2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notable changes in Python 3.6.4
|
|
|
|
|
===============================
|
|
|
|
|
|
|
|
|
|
The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
|
|
|
|
|
has been removed as its members being never cleared may cause a segfault
|
|
|
|
|
during finalization of the interpreter.
|
|
|
|
|
(Contributed by Xavier de Gaye in :issue:`22898` and :issue:`30697`.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notable changes in Python 3.6.5
|
|
|
|
|
===============================
|
|
|
|
|
|
|
|
|
|
The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``
|
|
|
|
|
locale to the ``LC_NUMERIC`` locale in some cases.
|
|
|
|
|
(Contributed by Victor Stinner in :issue:`31900`.)
|
2018-10-24 04:20:05 -03:00
|
|
|
|
|
|
|
|
|
Notable changes in Python 3.6.7
|
|
|
|
|
===============================
|
|
|
|
|
|
|
|
|
|
In 3.6.7 the :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token
|
|
|
|
|
when provided with input that does not have a trailing new line. This behavior
|
|
|
|
|
now matches what the C tokenizer does internally.
|
|
|
|
|
(Contributed by Ammar Askar in :issue:`33899`.)
|
2019-12-16 17:50:34 -04:00
|
|
|
|
|
|
|
|
|
Notable changes in Python 3.6.10
|
|
|
|
|
================================
|
|
|
|
|
|
|
|
|
|
Due to significant security concerns, the *reuse_address* parameter of
|
|
|
|
|
:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This is
|
|
|
|
|
because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For more
|
|
|
|
|
details, see the documentation for ``loop.create_datagram_endpoint()``.
|
|
|
|
|
(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in
|
|
|
|
|
:issue:`37228`.)
|
2021-02-14 18:41:57 -04:00
|
|
|
|
|
|
|
|
|
Notable changes in Python 3.6.13
|
|
|
|
|
================================
|
|
|
|
|
|
2021-02-15 13:00:20 -04:00
|
|
|
|
Earlier Python versions allowed using both ``;`` and ``&`` as
|
2021-02-14 18:41:57 -04:00
|
|
|
|
query parameter separators in :func:`urllib.parse.parse_qs` and
|
|
|
|
|
:func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with
|
|
|
|
|
newer W3C recommendations, this has been changed to allow only a single
|
2021-02-15 13:00:20 -04:00
|
|
|
|
separator key, with ``&`` as the default. This change also affects
|
2021-02-14 18:41:57 -04:00
|
|
|
|
:func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected
|
|
|
|
|
functions internally. For more details, please see their respective
|
|
|
|
|
documentation.
|
|
|
|
|
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|