Home | History | Annotate | Download | only in whatsnew
      1 ****************************
      2   What's New In Python 3.6
      3 ****************************
      4 
      5 :Editors: Elvis Pranskevichus <elvis (a] magic.io>, Yury Selivanov <yury (a] magic.io>
      6 
      7 .. Rules for maintenance:
      8 
      9    * Anyone can add text to this document.  Do not spend very much time
     10    on the wording of your changes, because your text will probably
     11    get rewritten to some degree.
     12 
     13    * The maintainer will go through Misc/NEWS periodically and add
     14    changes; it's therefore more important to add your changes to
     15    Misc/NEWS than to this file.
     16 
     17    * This is not a complete list of every single change; completeness
     18    is the purpose of Misc/NEWS.  Some changes I consider too small
     19    or esoteric to include.  If such a change is added to the text,
     20    I'll just remove it.  (This is another reason you shouldn't spend
     21    too much time on writing your addition.)
     22 
     23    * If you want to draw your new text to the attention of the
     24    maintainer, add 'XXX' to the beginning of the paragraph or
     25    section.
     26 
     27    * It's OK to just add a fragmentary note about a change.  For
     28    example: "XXX Describe the transmogrify() function added to the
     29    socket module."  The maintainer will research the change and
     30    write the necessary text.
     31 
     32    * You can comment out your additions if you like, but it's not
     33    necessary (especially when a final release is some months away).
     34 
     35    * Credit the author of a patch or bugfix.   Just the name is
     36    sufficient; the e-mail address isn't necessary.
     37 
     38    * It's helpful to add the bug/patch number as a comment:
     39 
     40    XXX Describe the transmogrify() function added to the socket
     41    module.
     42    (Contributed by P.Y. Developer in :issue:`12345`.)
     43 
     44    This saves the maintainer the effort of going through the Mercurial log
     45    when researching a change.
     46 
     47 This article explains the new features in Python 3.6, compared to 3.5.
     48 Python 3.6 was released on December 23, 2016. See the
     49 `changelog <https://docs.python.org/3.6/whatsnew/changelog.html>`_ for a full
     50 list of changes.
     51 
     52 .. seealso::
     53 
     54     :pep:`494` - Python 3.6 Release Schedule
     55 
     56 
     57 Summary -- Release highlights
     58 =============================
     59 
     60 New syntax features:
     61 
     62 * :ref:`PEP 498 <whatsnew36-pep498>`, formatted string literals.
     63 
     64 * :ref:`PEP 515 <whatsnew36-pep515>`, underscores in numeric literals.
     65 
     66 * :ref:`PEP 526 <whatsnew36-pep526>`, syntax for variable annotations.
     67 
     68 * :ref:`PEP 525 <whatsnew36-pep525>`, asynchronous generators.
     69 
     70 * :ref:`PEP 530 <whatsnew36-pep530>`: asynchronous comprehensions.
     71 
     72 
     73 New library modules:
     74 
     75 * :mod:`secrets`: :ref:`PEP 506 -- Adding A Secrets Module To The Standard Library <whatsnew36-pep506>`.
     76 
     77 
     78 CPython implementation improvements:
     79 
     80 * The :ref:`dict <typesmapping>` type has been reimplemented to use
     81   a :ref:`more compact representation <whatsnew36-compactdict>`
     82   based on `a proposal by Raymond Hettinger
     83   <https://mail.python.org/pipermail/python-dev/2012-December/123028.html>`_
     84   and similar to the `PyPy dict implementation`_.  This resulted in dictionaries
     85   using 20% to 25% less memory when compared to Python 3.5.
     86 
     87 * Customization of class creation has been simplified with the
     88   :ref:`new protocol <whatsnew36-pep487>`.
     89 
     90 * The class attribute definition order is
     91   :ref:`now preserved  <whatsnew36-pep520>`.
     92 
     93 * The order of elements in ``**kwargs`` now
     94   :ref:`corresponds to the order <whatsnew36-pep468>` in which keyword
     95   arguments were passed to the function.
     96 
     97 * DTrace and SystemTap :ref:`probing support <whatsnew36-tracing>` has
     98   been added.
     99 
    100 * The new :ref:`PYTHONMALLOC <whatsnew36-pythonmalloc>` environment variable
    101   can now be used to debug the interpreter memory allocation and access
    102   errors.
    103 
    104 
    105 Significant improvements in the standard library:
    106 
    107 * The :mod:`asyncio` module has received new features, significant
    108   usability and performance improvements, and a fair amount of bug fixes.
    109   Starting with Python 3.6 the ``asyncio`` module is no longer provisional
    110   and its API is considered stable.
    111 
    112 * A new :ref:`file system path protocol <whatsnew36-pep519>` has been
    113   implemented to support :term:`path-like objects <path-like object>`.
    114   All standard library functions operating on paths have been updated to
    115   work with the new protocol.
    116 
    117 * The :mod:`datetime` module has gained support for
    118   :ref:`Local Time Disambiguation <whatsnew36-pep495>`.
    119 
    120 * The :mod:`typing` module received a number of
    121   :ref:`improvements <whatsnew36-typing>`.
    122 
    123 * The :mod:`tracemalloc` module has been significantly reworked
    124   and is now used to provide better output for :exc:`ResourceWarning`
    125   as well as provide better diagnostics for memory allocation errors.
    126   See the :ref:`PYTHONMALLOC section <whatsnew36-pythonmalloc>` for more
    127   information.
    128 
    129 
    130 Security improvements:
    131 
    132 * The new :mod:`secrets` module has been added to simplify the generation of
    133   cryptographically strong pseudo-random numbers suitable for
    134   managing secrets such as account authentication, tokens, and similar.
    135 
    136 * On Linux, :func:`os.urandom` now blocks until the system urandom entropy
    137   pool is initialized to increase the security. See the :pep:`524` for the
    138   rationale.
    139 
    140 * The :mod:`hashlib` and :mod:`ssl` modules now support OpenSSL 1.1.0.
    141 
    142 * The default settings and feature set of the :mod:`ssl` module have been
    143   improved.
    144 
    145 * The :mod:`hashlib` module received support for the BLAKE2, SHA-3 and SHAKE
    146   hash algorithms and the :func:`~hashlib.scrypt` key derivation function.
    147 
    148 
    149 Windows improvements:
    150 
    151 * :ref:`PEP 528 <whatsnew36-pep528>` and :ref:`PEP 529 <whatsnew36-pep529>`,
    152   Windows filesystem and console encoding changed to UTF-8.
    153 
    154 * The ``py.exe`` launcher, when used interactively, no longer prefers
    155   Python 2 over Python 3 when the user doesn't specify a version (via
    156   command line arguments or a config file).  Handling of shebang lines
    157   remains unchanged - "python" refers to Python 2 in that case.
    158 
    159 * ``python.exe`` and ``pythonw.exe`` have been marked as long-path aware,
    160   which means that the 260 character path limit may no longer apply.
    161   See :ref:`removing the MAX_PATH limitation <max-path>` for details.
    162 
    163 * A ``._pth`` file can be added to force isolated mode and fully specify
    164   all search paths to avoid registry and environment lookup. See
    165   :ref:`the documentation <finding_modules>` for more information.
    166 
    167 * A ``python36.zip`` file now works as a landmark to infer
    168   :envvar:`PYTHONHOME`. See :ref:`the documentation <finding_modules>` for
    169   more information.
    170 
    171 
    172 .. _PyPy dict implementation: https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html
    173 
    174 
    175 New Features
    176 ============
    177 
    178 .. _whatsnew36-pep498:
    179 
    180 PEP 498: Formatted string literals
    181 ----------------------------------
    182 
    183 :pep:`498` introduces a new kind of string literals: *f-strings*, or
    184 :ref:`formatted string literals <f-strings>`.
    185 
    186 Formatted string literals are prefixed with ``'f'`` and are similar to
    187 the format strings accepted by :meth:`str.format`.  They contain replacement
    188 fields surrounded by curly braces.  The replacement fields are expressions,
    189 which are evaluated at run time, and then formatted using the
    190 :func:`format` protocol::
    191 
    192     >>> name = "Fred"
    193     >>> f"He said his name is {name}."
    194     'He said his name is Fred.'
    195     >>> width = 10
    196     >>> precision = 4
    197     >>> value = decimal.Decimal("12.34567")
    198     >>> f"result: {value:{width}.{precision}}"  # nested fields
    199     'result:      12.35'
    200 
    201 .. seealso::
    202 
    203     :pep:`498` -- Literal String Interpolation.
    204        PEP written and implemented by Eric V. Smith.
    205 
    206     :ref:`Feature documentation <f-strings>`.
    207 
    208 
    209 .. _whatsnew36-pep526:
    210 
    211 PEP 526: Syntax for variable annotations
    212 ----------------------------------------
    213 
    214 :pep:`484` introduced the standard for type annotations of function
    215 parameters, a.k.a. type hints. This PEP adds syntax to Python for annotating
    216 the types of variables including class variables and instance variables::
    217 
    218     primes: List[int] = []
    219 
    220     captain: str  # Note: no initial value!
    221 
    222     class Starship:
    223         stats: Dict[str, int] = {}
    224 
    225 Just as for function annotations, the Python interpreter does not attach any
    226 particular meaning to variable annotations and only stores them in the
    227 ``__annotations__`` attribute of a class or module.
    228 
    229 In contrast to variable declarations in statically typed languages,
    230 the goal of annotation syntax is to provide an easy way to specify structured
    231 type metadata for third party tools and libraries via the abstract syntax tree
    232 and the ``__annotations__`` attribute.
    233 
    234 .. seealso::
    235 
    236    :pep:`526` -- Syntax for variable annotations.
    237       PEP written by Ryan Gonzalez, Philip House, Ivan Levkivskyi, Lisa Roach,
    238       and Guido van Rossum. Implemented by Ivan Levkivskyi.
    239 
    240    Tools that use or will use the new syntax:
    241    `mypy <http://www.mypy-lang.org/>`_,
    242    `pytype <https://github.com/google/pytype>`_, PyCharm, etc.
    243 
    244 
    245 .. _whatsnew36-pep515:
    246 
    247 PEP 515: Underscores in Numeric Literals
    248 ----------------------------------------
    249 
    250 :pep:`515` adds the ability to use underscores in numeric literals for
    251 improved readability.  For example::
    252 
    253     >>> 1_000_000_000_000_000
    254     1000000000000000
    255     >>> 0x_FF_FF_FF_FF
    256     4294967295
    257 
    258 Single underscores are allowed between digits and after any base
    259 specifier.  Leading, trailing, or multiple underscores in a row are not
    260 allowed.
    261 
    262 The :ref:`string formatting <formatspec>` language also now has support
    263 for the ``'_'`` option to signal the use of an underscore for a thousands
    264 separator for floating point presentation types and for integer
    265 presentation type ``'d'``.  For integer presentation types ``'b'``,
    266 ``'o'``, ``'x'``, and ``'X'``, underscores will be inserted every 4
    267 digits::
    268 
    269     >>> '{:_}'.format(1000000)
    270     '1_000_000'
    271     >>> '{:_x}'.format(0xFFFFFFFF)
    272     'ffff_ffff'
    273 
    274 .. seealso::
    275 
    276    :pep:`515` -- Underscores in Numeric Literals
    277       PEP written by Georg Brandl and Serhiy Storchaka.
    278 
    279 
    280 .. _whatsnew36-pep525:
    281 
    282 PEP 525: Asynchronous Generators
    283 --------------------------------
    284 
    285 :pep:`492` introduced support for native coroutines and ``async`` / ``await``
    286 syntax to Python 3.5.  A notable limitation of the Python 3.5 implementation
    287 is that it was not possible to use ``await`` and ``yield`` in the same
    288 function body.  In Python 3.6 this restriction has been lifted, making it
    289 possible to define *asynchronous generators*::
    290 
    291     async def ticker(delay, to):
    292         """Yield numbers from 0 to *to* every *delay* seconds."""
    293         for i in range(to):
    294             yield i
    295             await asyncio.sleep(delay)
    296 
    297 The new syntax allows for faster and more concise code.
    298 
    299 .. seealso::
    300 
    301    :pep:`525` -- Asynchronous Generators
    302       PEP written and implemented by Yury Selivanov.
    303 
    304 
    305 .. _whatsnew36-pep530:
    306 
    307 PEP 530: Asynchronous Comprehensions
    308 ------------------------------------
    309 
    310 :pep:`530` adds support for using ``async for`` in list, set, dict
    311 comprehensions and generator expressions::
    312 
    313     result = [i async for i in aiter() if i % 2]
    314 
    315 Additionally, ``await`` expressions are supported in all kinds
    316 of comprehensions::
    317 
    318     result = [await fun() for fun in funcs if await condition()]
    319 
    320 .. seealso::
    321 
    322  :pep:`530` -- Asynchronous Comprehensions
    323     PEP written and implemented by Yury Selivanov.
    324 
    325 
    326 .. _whatsnew36-pep487:
    327 
    328 PEP 487: Simpler customization of class creation
    329 ------------------------------------------------
    330 
    331 It is now possible to customize subclass creation without using a metaclass.
    332 The new ``__init_subclass__`` classmethod will be called on the base class
    333 whenever a new subclass is created::
    334 
    335     class PluginBase:
    336         subclasses = []
    337 
    338         def __init_subclass__(cls, **kwargs):
    339             super().__init_subclass__(**kwargs)
    340             cls.subclasses.append(cls)
    341 
    342     class Plugin1(PluginBase):
    343         pass
    344 
    345     class Plugin2(PluginBase):
    346         pass
    347 
    348 In order to allow zero-argument :func:`super` calls to work correctly from
    349 :meth:`~object.__init_subclass__` implementations, custom metaclasses must
    350 ensure that the new ``__classcell__`` namespace entry is propagated to
    351 ``type.__new__`` (as described in :ref:`class-object-creation`).
    352 
    353 .. seealso::
    354 
    355  :pep:`487` -- Simpler customization of class creation
    356     PEP written and implemented by Martin Teichmann.
    357 
    358  :ref:`Feature documentation <class-customization>`
    359 
    360 
    361 .. _whatsnew36-pep487-descriptors:
    362 
    363 PEP 487: Descriptor Protocol Enhancements
    364 -----------------------------------------
    365 
    366 :pep:`487` extends the descriptor protocol to include the new optional
    367 :meth:`~object.__set_name__` method.  Whenever a new class is defined, the new
    368 method will be called on all descriptors included in the definition, providing
    369 them with a reference to the class being defined and the name given to the
    370 descriptor within the class namespace.  In other words, instances of
    371 descriptors can now know the attribute name of the descriptor in the
    372 owner class::
    373 
    374     class IntField:
    375         def __get__(self, instance, owner):
    376             return instance.__dict__[self.name]
    377 
    378         def __set__(self, instance, value):
    379             if not isinstance(value, int):
    380                 raise ValueError(f'expecting integer in {self.name}')
    381             instance.__dict__[self.name] = value
    382 
    383         # this is the new initializer:
    384         def __set_name__(self, owner, name):
    385             self.name = name
    386 
    387     class Model:
    388         int_field = IntField()
    389 
    390 
    391 .. seealso::
    392 
    393     :pep:`487` -- Simpler customization of class creation
    394         PEP written and implemented by Martin Teichmann.
    395 
    396     :ref:`Feature documentation <descriptors>`
    397 
    398 
    399 .. _whatsnew36-pep519:
    400 
    401 PEP 519: Adding a file system path protocol
    402 -------------------------------------------
    403 
    404 File system paths have historically been represented as :class:`str`
    405 or :class:`bytes` objects. This has led to people who write code which
    406 operate on file system paths to assume that such objects are only one
    407 of those two types (an :class:`int` representing a file descriptor
    408 does not count as that is not a file path). Unfortunately that
    409 assumption prevents alternative object representations of file system
    410 paths like :mod:`pathlib` from working with pre-existing code,
    411 including Python's standard library.
    412 
    413 To fix this situation, a new interface represented by
    414 :class:`os.PathLike` has been defined. By implementing the
    415 :meth:`~os.PathLike.__fspath__` method, an object signals that it
    416 represents a path. An object can then provide a low-level
    417 representation of a file system path as a :class:`str` or
    418 :class:`bytes` object. This means an object is considered
    419 :term:`path-like <path-like object>` if it implements
    420 :class:`os.PathLike` or is a :class:`str` or :class:`bytes` object
    421 which represents a file system path. Code can use :func:`os.fspath`,
    422 :func:`os.fsdecode`, or :func:`os.fsencode` to explicitly get a
    423 :class:`str` and/or :class:`bytes` representation of a path-like
    424 object.
    425 
    426 The built-in :func:`open` function has been updated to accept
    427 :class:`os.PathLike` objects, as have all relevant functions in the
    428 :mod:`os` and :mod:`os.path` modules, and most other functions and
    429 classes in the standard library.  The :class:`os.DirEntry` class
    430 and relevant classes in :mod:`pathlib` have also been updated to
    431 implement :class:`os.PathLike`.
    432 
    433 The hope is that updating the fundamental functions for operating
    434 on file system paths will lead to third-party code to implicitly
    435 support all :term:`path-like objects <path-like object>` without any
    436 code changes, or at least very minimal ones (e.g. calling
    437 :func:`os.fspath` at the beginning of code before operating on a
    438 path-like object).
    439 
    440 Here are some examples of how the new interface allows for
    441 :class:`pathlib.Path` to be used more easily and transparently with
    442 pre-existing code::
    443 
    444   >>> import pathlib
    445   >>> with open(pathlib.Path("README")) as f:
    446   ...     contents = f.read()
    447   ...
    448   >>> import os.path
    449   >>> os.path.splitext(pathlib.Path("some_file.txt"))
    450   ('some_file', '.txt')
    451   >>> os.path.join("/a/b", pathlib.Path("c"))
    452   '/a/b/c'
    453   >>> import os
    454   >>> os.fspath(pathlib.Path("some_file.txt"))
    455   'some_file.txt'
    456 
    457 (Implemented by Brett Cannon, Ethan Furman, Dusty Phillips, and Jelle Zijlstra.)
    458 
    459 .. seealso::
    460 
    461     :pep:`519` -- Adding a file system path protocol
    462        PEP written by Brett Cannon and Koos Zevenhoven.
    463 
    464 
    465 .. _whatsnew36-pep495:
    466 
    467 PEP 495: Local Time Disambiguation
    468 ----------------------------------
    469 
    470 In most world locations, there have been and will be times when local clocks
    471 are moved back.  In those times, intervals are introduced in which local
    472 clocks show the same time twice in the same day. In these situations, the
    473 information displayed on a local clock (or stored in a Python datetime
    474 instance) is insufficient to identify a particular moment in time.
    475 
    476 :pep:`495` adds the new *fold* attribute to instances of
    477 :class:`datetime.datetime` and :class:`datetime.time` classes to differentiate
    478 between two moments in time for which local times are the same::
    479 
    480     >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
    481     >>> for i in range(4):
    482     ...     u = u0 + i*HOUR
    483     ...     t = u.astimezone(Eastern)
    484     ...     print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
    485     ...
    486     04:00:00 UTC = 00:00:00 EDT 0
    487     05:00:00 UTC = 01:00:00 EDT 0
    488     06:00:00 UTC = 01:00:00 EST 1
    489     07:00:00 UTC = 02:00:00 EST 0
    490 
    491 The values of the :attr:`fold <datetime.datetime.fold>` attribute have the
    492 value ``0`` for all instances except those that represent the second
    493 (chronologically) moment in time in an ambiguous case.
    494 
    495 .. seealso::
    496 
    497   :pep:`495` -- Local Time Disambiguation
    498      PEP written by Alexander Belopolsky and Tim Peters, implementation
    499      by Alexander Belopolsky.
    500 
    501 
    502 .. _whatsnew36-pep529:
    503 
    504 PEP 529: Change Windows filesystem encoding to UTF-8
    505 ----------------------------------------------------
    506 
    507 Representing filesystem paths is best performed with str (Unicode) rather than
    508 bytes. However, there are some situations where using bytes is sufficient and
    509 correct.
    510 
    511 Prior to Python 3.6, data loss could result when using bytes paths on Windows.
    512 With this change, using bytes to represent paths is now supported on Windows,
    513 provided those bytes are encoded with the encoding returned by
    514 :func:`sys.getfilesystemencoding()`, which now defaults to ``'utf-8'``.
    515 
    516 Applications that do not use str to represent paths should use
    517 :func:`os.fsencode()` and :func:`os.fsdecode()` to ensure their bytes are
    518 correctly encoded. To revert to the previous behaviour, set
    519 :envvar:`PYTHONLEGACYWINDOWSFSENCODING` or call
    520 :func:`sys._enablelegacywindowsfsencoding`.
    521 
    522 See :pep:`529` for more information and discussion of code modifications that
    523 may be required.
    524 
    525 
    526 .. _whatsnew36-pep528:
    527 
    528 PEP 528: Change Windows console encoding to UTF-8
    529 -------------------------------------------------
    530 
    531 The default console on Windows will now accept all Unicode characters and
    532 provide correctly read str objects to Python code. ``sys.stdin``,
    533 ``sys.stdout`` and ``sys.stderr`` now default to utf-8 encoding.
    534 
    535 This change only applies when using an interactive console, and not when
    536 redirecting files or pipes. To revert to the previous behaviour for interactive
    537 console use, set :envvar:`PYTHONLEGACYWINDOWSSTDIO`.
    538 
    539 .. seealso::
    540 
    541    :pep:`528` -- Change Windows console encoding to UTF-8
    542       PEP written and implemented by Steve Dower.
    543 
    544 
    545 .. _whatsnew36-pep520:
    546 
    547 PEP 520: Preserving Class Attribute Definition Order
    548 ----------------------------------------------------
    549 
    550 Attributes in a class definition body have a natural ordering: the same
    551 order in which the names appear in the source.  This order is now
    552 preserved in the new class's :attr:`~object.__dict__` attribute.
    553 
    554 Also, the effective default class *execution* namespace (returned from
    555 :ref:`type.__prepare__() <prepare>`) is now an insertion-order-preserving
    556 mapping.
    557 
    558 .. seealso::
    559 
    560    :pep:`520` -- Preserving Class Attribute Definition Order
    561       PEP written and implemented by Eric Snow.
    562 
    563 
    564 .. _whatsnew36-pep468:
    565 
    566 PEP 468: Preserving Keyword Argument Order
    567 ------------------------------------------
    568 
    569 ``**kwargs`` in a function signature is now guaranteed to be an
    570 insertion-order-preserving mapping.
    571 
    572 .. seealso::
    573 
    574    :pep:`468` -- Preserving Keyword Argument Order
    575       PEP written and implemented by Eric Snow.
    576 
    577 
    578 .. _whatsnew36-compactdict:
    579 
    580 New :ref:`dict <typesmapping>` implementation
    581 ---------------------------------------------
    582 
    583 The :ref:`dict <typesmapping>` type now uses a "compact" representation
    584 based on `a proposal by Raymond Hettinger
    585 <https://mail.python.org/pipermail/python-dev/2012-December/123028.html>`_
    586 which was `first implemented by PyPy
    587 <https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html>`_.
    588 The memory usage of the new :func:`dict` is between 20% and 25% smaller
    589 compared to Python 3.5.
    590 
    591 The order-preserving aspect of this new implementation is considered an
    592 implementation detail and should not be relied upon (this may change in
    593 the future, but it is desired to have this new dict implementation in
    594 the language for a few releases before changing the language spec to mandate
    595 order-preserving semantics for all current and future Python
    596 implementations; this also helps preserve backwards-compatibility
    597 with older versions of the language where random iteration order is
    598 still in effect, e.g. Python 3.5).
    599 
    600 (Contributed by INADA Naoki in :issue:`27350`. Idea
    601 `originally suggested by Raymond Hettinger
    602 <https://mail.python.org/pipermail/python-dev/2012-December/123028.html>`_.)
    603 
    604 
    605 .. _whatsnew36-pep523:
    606 
    607 PEP 523: Adding a frame evaluation API to CPython
    608 -------------------------------------------------
    609 
    610 While Python provides extensive support to customize how code
    611 executes, one place it has not done so is in the evaluation of frame
    612 objects.  If you wanted some way to intercept frame evaluation in
    613 Python there really wasn't any way without directly manipulating
    614 function pointers for defined functions.
    615 
    616 :pep:`523` changes this by providing an API to make frame
    617 evaluation pluggable at the C level. This will allow for tools such
    618 as debuggers and JITs to intercept frame evaluation before the
    619 execution of Python code begins. This enables the use of alternative
    620 evaluation implementations for Python code, tracking frame
    621 evaluation, etc.
    622 
    623 This API is not part of the limited C API and is marked as private to
    624 signal that usage of this API is expected to be limited and only
    625 applicable to very select, low-level use-cases. Semantics of the
    626 API will change with Python as necessary.
    627 
    628 .. seealso::
    629 
    630   :pep:`523` -- Adding a frame evaluation API to CPython
    631      PEP written by Brett Cannon and Dino Viehland.
    632 
    633 
    634 .. _whatsnew36-pythonmalloc:
    635 
    636 PYTHONMALLOC environment variable
    637 ---------------------------------
    638 
    639 The new :envvar:`PYTHONMALLOC` environment variable allows setting the Python
    640 memory allocators and installing debug hooks.
    641 
    642 It is now possible to install debug hooks on Python memory allocators on Python
    643 compiled in release mode using ``PYTHONMALLOC=debug``. Effects of debug hooks:
    644 
    645 * Newly allocated memory is filled with the byte ``0xCB``
    646 * Freed memory is filled with the byte ``0xDB``
    647 * Detect violations of the Python memory allocator API. For example,
    648   :c:func:`PyObject_Free` called on a memory block allocated by
    649   :c:func:`PyMem_Malloc`.
    650 * Detect writes before the start of a buffer (buffer underflows)
    651 * Detect writes after the end of a buffer (buffer overflows)
    652 * Check that the :term:`GIL <global interpreter lock>` is held when allocator
    653   functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and
    654   :c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called.
    655 
    656 Checking if the GIL is held is also a new feature of Python 3.6.
    657 
    658 See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python
    659 memory allocators.
    660 
    661 It is now also possible to force the usage of the :c:func:`malloc` allocator of
    662 the C library for all Python memory allocations using ``PYTHONMALLOC=malloc``.
    663 This is helpful when using external memory debuggers like Valgrind on
    664 a Python compiled in release mode.
    665 
    666 On error, the debug hooks on Python memory allocators now use the
    667 :mod:`tracemalloc` module to get the traceback where a memory block was
    668 allocated.
    669 
    670 Example of fatal error on buffer overflow using
    671 ``python3.6 -X tracemalloc=5`` (store 5 frames in traces)::
    672 
    673     Debug memory block at address p=0x7fbcd41666f8: API 'o'
    674         4 bytes originally requested
    675         The 7 pad bytes at p-7 are FORBIDDENBYTE, as expected.
    676         The 8 pad bytes at tail=0x7fbcd41666fc are not all FORBIDDENBYTE (0xfb):
    677             at tail+0: 0x02 *** OUCH
    678             at tail+1: 0xfb
    679             at tail+2: 0xfb
    680             at tail+3: 0xfb
    681             at tail+4: 0xfb
    682             at tail+5: 0xfb
    683             at tail+6: 0xfb
    684             at tail+7: 0xfb
    685         The block was made by call #1233329 to debug malloc/realloc.
    686         Data at p: 1a 2b 30 00
    687 
    688     Memory block allocated at (most recent call first):
    689       File "test/test_bytes.py", line 323
    690       File "unittest/case.py", line 600
    691       File "unittest/case.py", line 648
    692       File "unittest/suite.py", line 122
    693       File "unittest/suite.py", line 84
    694 
    695     Fatal Python error: bad trailing pad byte
    696 
    697     Current thread 0x00007fbcdbd32700 (most recent call first):
    698       File "test/test_bytes.py", line 323 in test_hex
    699       File "unittest/case.py", line 600 in run
    700       File "unittest/case.py", line 648 in __call__
    701       File "unittest/suite.py", line 122 in run
    702       File "unittest/suite.py", line 84 in __call__
    703       File "unittest/suite.py", line 122 in run
    704       File "unittest/suite.py", line 84 in __call__
    705       ...
    706 
    707 (Contributed by Victor Stinner in :issue:`26516` and :issue:`26564`.)
    708 
    709 
    710 .. _whatsnew36-tracing:
    711 
    712 DTrace and SystemTap probing support
    713 ------------------------------------
    714 
    715 Python can now be built ``--with-dtrace`` which enables static markers
    716 for the following events in the interpreter:
    717 
    718 * function call/return
    719 
    720 * garbage collection started/finished
    721 
    722 * line of code executed.
    723 
    724 This can be used to instrument running interpreters in production,
    725 without the need to recompile specific debug builds or providing
    726 application-specific profiling/debugging code.
    727 
    728 More details in :ref:`instrumentation`.
    729 
    730 The current implementation is tested on Linux and macOS.  Additional
    731 markers may be added in the future.
    732 
    733 (Contributed by ukasz Langa in :issue:`21590`, based on patches by
    734 Jess Cea Avin, David Malcolm, and Nikhil Benesch.)
    735 
    736 
    737 Other Language Changes
    738 ======================
    739 
    740 Some smaller changes made to the core Python language are:
    741 
    742 * A ``global`` or ``nonlocal`` statement must now textually appear
    743   before the first use of the affected name in the same scope.
    744   Previously this was a :exc:`SyntaxWarning`.
    745 
    746 * It is now possible to set a :ref:`special method <specialnames>` to
    747   ``None`` to indicate that the corresponding operation is not available.
    748   For example, if a class sets :meth:`__iter__` to ``None``, the class
    749   is not iterable.
    750   (Contributed by Andrew Barnert and Ivan Levkivskyi in :issue:`25958`.)
    751 
    752 * Long sequences of repeated traceback lines are now abbreviated as
    753   ``"[Previous line repeated {count} more times]"`` (see
    754   :ref:`whatsnew36-traceback` for an example).
    755   (Contributed by Emanuel Barry in :issue:`26823`.)
    756 
    757 * Import now raises the new exception :exc:`ModuleNotFoundError`
    758   (subclass of :exc:`ImportError`) when it cannot find a module.  Code
    759   that currently checks for ImportError (in try-except) will still work.
    760   (Contributed by Eric Snow in :issue:`15767`.)
    761 
    762 * Class methods relying on zero-argument ``super()`` will now work correctly
    763   when called from metaclass methods during class creation.
    764   (Contributed by Martin Teichmann in :issue:`23722`.)
    765 
    766 
    767 New Modules
    768 ===========
    769 
    770 .. _whatsnew36-pep506:
    771 
    772 secrets
    773 -------
    774 
    775 The main purpose of the new :mod:`secrets` module is to provide an obvious way
    776 to reliably generate cryptographically strong pseudo-random values suitable
    777 for managing secrets, such as account authentication, tokens, and similar.
    778 
    779 .. warning::
    780 
    781   Note that the pseudo-random generators in the :mod:`random` module
    782   should *NOT* be used for security purposes.  Use :mod:`secrets`
    783   on Python 3.6+ and :func:`os.urandom()` on Python 3.5 and earlier.
    784 
    785 .. seealso::
    786 
    787     :pep:`506` -- Adding A Secrets Module To The Standard Library
    788       PEP written and implemented by Steven D'Aprano.
    789 
    790 
    791 Improved Modules
    792 ================
    793 
    794 array
    795 -----
    796 
    797 Exhausted iterators of :class:`array.array` will now stay exhausted even
    798 if the iterated array is extended.  This is consistent with the behavior
    799 of other mutable sequences.
    800 
    801 Contributed by Serhiy Storchaka in :issue:`26492`.
    802 
    803 ast
    804 ---
    805 
    806 The new :class:`ast.Constant` AST node has been added.  It can be used
    807 by external AST optimizers for the purposes of constant folding.
    808 
    809 Contributed by Victor Stinner in :issue:`26146`.
    810 
    811 
    812 asyncio
    813 -------
    814 
    815 Starting with Python 3.6 the ``asyncio`` module is no longer provisional and its
    816 API is considered stable.
    817 
    818 Notable changes in the :mod:`asyncio` module since Python 3.5.0
    819 (all backported to 3.5.x due to the provisional status):
    820 
    821 * The :func:`~asyncio.get_event_loop` function has been changed to
    822   always return the currently running loop when called from coroutines
    823   and callbacks.
    824   (Contributed by Yury Selivanov in :issue:`28613`.)
    825 
    826 * The :func:`~asyncio.ensure_future` function and all functions that
    827   use it, such as :meth:`loop.run_until_complete() <asyncio.loop.run_until_complete>`,
    828   now accept all kinds of :term:`awaitable objects <awaitable>`.
    829   (Contributed by Yury Selivanov.)
    830 
    831 * New :func:`~asyncio.run_coroutine_threadsafe` function to submit
    832   coroutines to event loops from other threads.
    833   (Contributed by Vincent Michel.)
    834 
    835 * New :meth:`Transport.is_closing() <asyncio.BaseTransport.is_closing>`
    836   method to check if the transport is closing or closed.
    837   (Contributed by Yury Selivanov.)
    838 
    839 * The :meth:`loop.create_server() <asyncio.loop.create_server>`
    840   method can now accept a list of hosts.
    841   (Contributed by Yann Sionneau.)
    842 
    843 * New :meth:`loop.create_future() <asyncio.loop.create_future>`
    844   method to create Future objects.  This allows alternative event
    845   loop implementations, such as
    846   `uvloop <https://github.com/MagicStack/uvloop>`_, to provide a faster
    847   :class:`asyncio.Future` implementation.
    848   (Contributed by Yury Selivanov in :issue:`27041`.)
    849 
    850 * New :meth:`loop.get_exception_handler() <asyncio.loop.get_exception_handler>`
    851   method to get the current exception handler.
    852   (Contributed by Yury Selivanov in :issue:`27040`.)
    853 
    854 * New :meth:`StreamReader.readuntil() <asyncio.StreamReader.readuntil>`
    855   method to read data from the stream until a separator bytes
    856   sequence appears.
    857   (Contributed by Mark Korenberg.)
    858 
    859 * The performance of :meth:`StreamReader.readexactly() <asyncio.StreamReader.readexactly>`
    860   has been improved.
    861   (Contributed by Mark Korenberg in :issue:`28370`.)
    862 
    863 * The :meth:`loop.getaddrinfo() <asyncio.loop.getaddrinfo>`
    864   method is optimized to avoid calling the system ``getaddrinfo``
    865   function if the address is already resolved.
    866   (Contributed by A. Jesse Jiryu Davis.)
    867 
    868 * The :meth:`loop.stop() <asyncio.loop.stop>`
    869   method has been changed to stop the loop immediately after
    870   the current iteration.  Any new callbacks scheduled as a result
    871   of the last iteration will be discarded.
    872   (Contributed by Guido van Rossum in :issue:`25593`.)
    873 
    874 * :meth:`Future.set_exception <asyncio.futures.Future.set_exception>`
    875   will now raise :exc:`TypeError` when passed an instance of
    876   the :exc:`StopIteration` exception.
    877   (Contributed by Chris Angelico in :issue:`26221`.)
    878 
    879 * New :meth:`loop.connect_accepted_socket() <asyncio.loop.connect_accepted_socket>`
    880   method to be used by servers that accept connections outside of asyncio,
    881   but that use asyncio to handle them.
    882   (Contributed by Jim Fulton in :issue:`27392`.)
    883 
    884 * ``TCP_NODELAY`` flag is now set for all TCP transports by default.
    885   (Contributed by Yury Selivanov in :issue:`27456`.)
    886 
    887 * New :meth:`loop.shutdown_asyncgens() <asyncio.loop.shutdown_asyncgens>`
    888   to properly close pending asynchronous generators before closing the
    889   loop.
    890   (Contributed by Yury Selivanov in :issue:`28003`.)
    891 
    892 * :class:`Future <asyncio.Future>` and :class:`Task <asyncio.Task>`
    893   classes now have an optimized C implementation which makes asyncio
    894   code up to 30% faster.
    895   (Contributed by Yury Selivanov and INADA Naoki in :issue:`26081`
    896   and :issue:`28544`.)
    897 
    898 
    899 binascii
    900 --------
    901 
    902 The :func:`~binascii.b2a_base64` function now accepts an optional *newline*
    903 keyword argument to control whether the newline character is appended to the
    904 return value.
    905 (Contributed by Victor Stinner in :issue:`25357`.)
    906 
    907 
    908 cmath
    909 -----
    910 
    911 The new :const:`cmath.tau` (**) constant has been added.
    912 (Contributed by Lisa Roach in :issue:`12345`, see :pep:`628` for details.)
    913 
    914 New constants: :const:`cmath.inf` and :const:`cmath.nan` to
    915 match :const:`math.inf` and :const:`math.nan`, and also :const:`cmath.infj`
    916 and :const:`cmath.nanj` to match the format used by complex repr.
    917 (Contributed by Mark Dickinson in :issue:`23229`.)
    918 
    919 
    920 collections
    921 -----------
    922 
    923 The new :class:`~collections.abc.Collection` abstract base class has been
    924 added to represent sized iterable container classes.
    925 (Contributed by Ivan Levkivskyi, docs by Neil Girdhar in :issue:`27598`.)
    926 
    927 The new :class:`~collections.abc.Reversible` abstract base class represents
    928 iterable classes that also provide the :meth:`__reversed__` method.
    929 (Contributed by Ivan Levkivskyi in :issue:`25987`.)
    930 
    931 The new :class:`~collections.abc.AsyncGenerator` abstract base class represents
    932 asynchronous generators.
    933 (Contributed by Yury Selivanov in :issue:`28720`.)
    934 
    935 The :func:`~collections.namedtuple` function now accepts an optional
    936 keyword argument *module*, which, when specified, is used for
    937 the ``__module__`` attribute of the returned named tuple class.
    938 (Contributed by Raymond Hettinger in :issue:`17941`.)
    939 
    940 The *verbose* and *rename* arguments for
    941 :func:`~collections.namedtuple` are now keyword-only.
    942 (Contributed by Raymond Hettinger in :issue:`25628`.)
    943 
    944 Recursive :class:`collections.deque` instances can now be pickled.
    945 (Contributed by Serhiy Storchaka in :issue:`26482`.)
    946 
    947 
    948 concurrent.futures
    949 ------------------
    950 
    951 The :class:`ThreadPoolExecutor <concurrent.futures.ThreadPoolExecutor>`
    952 class constructor now accepts an optional *thread_name_prefix* argument
    953 to make it possible to customize the names of the threads created by the
    954 pool.
    955 (Contributed by Gregory P. Smith in :issue:`27664`.)
    956 
    957 
    958 contextlib
    959 ----------
    960 
    961 The :class:`contextlib.AbstractContextManager` class has been added to
    962 provide an abstract base class for context managers.  It provides a
    963 sensible default implementation for `__enter__()` which returns
    964 ``self`` and leaves `__exit__()` an abstract method.  A matching
    965 class has been added to the :mod:`typing` module as
    966 :class:`typing.ContextManager`.
    967 (Contributed by Brett Cannon in :issue:`25609`.)
    968 
    969 
    970 datetime
    971 --------
    972 
    973 The :class:`~datetime.datetime` and :class:`~datetime.time` classes have
    974 the new :attr:`~time.fold` attribute used to disambiguate local time
    975 when necessary.  Many functions in the :mod:`datetime` have been
    976 updated to support local time disambiguation.
    977 See :ref:`Local Time Disambiguation <whatsnew36-pep495>` section for more
    978 information.
    979 (Contributed by Alexander Belopolsky in :issue:`24773`.)
    980 
    981 The :meth:`datetime.strftime() <datetime.datetime.strftime>` and
    982 :meth:`date.strftime() <datetime.date.strftime>` methods now support
    983 ISO 8601 date directives ``%G``, ``%u`` and ``%V``.
    984 (Contributed by Ashley Anderson in :issue:`12006`.)
    985 
    986 The :func:`datetime.isoformat() <datetime.datetime.isoformat>` function
    987 now accepts an optional *timespec* argument that specifies the number
    988 of additional components of the time value to include.
    989 (Contributed by Alessandro Cucci and Alexander Belopolsky in :issue:`19475`.)
    990 
    991 The :meth:`datetime.combine() <datetime.datetime.combine>` now
    992 accepts an optional *tzinfo* argument.
    993 (Contributed by Alexander Belopolsky in :issue:`27661`.)
    994 
    995 
    996 decimal
    997 -------
    998 
    999 New :meth:`Decimal.as_integer_ratio() <decimal.Decimal.as_integer_ratio>`
   1000 method that returns a pair ``(n, d)`` of integers that represent the given
   1001 :class:`~decimal.Decimal` instance as a fraction, in lowest terms and
   1002 with a positive denominator::
   1003 
   1004     >>> Decimal('-3.14').as_integer_ratio()
   1005     (-157, 50)
   1006 
   1007 (Contributed by Stefan Krah amd Mark Dickinson in :issue:`25928`.)
   1008 
   1009 
   1010 
   1011 distutils
   1012 ---------
   1013 
   1014 The ``default_format`` attribute has been removed from
   1015 :class:`distutils.command.sdist.sdist` and the ``formats``
   1016 attribute defaults to ``['gztar']``. Although not anticipated,
   1017 any code relying on the presence of ``default_format`` may
   1018 need to be adapted. See :issue:`27819` for more details.
   1019 
   1020 
   1021 email
   1022 -----
   1023 
   1024 The new email API, enabled via the *policy* keyword to various constructors, is
   1025 no longer provisional.  The :mod:`email` documentation has been reorganized and
   1026 rewritten to focus on the new API, while retaining the old documentation for
   1027 the legacy API.  (Contributed by R. David Murray in :issue:`24277`.)
   1028 
   1029 The :mod:`email.mime` classes now all accept an optional *policy* keyword.
   1030 (Contributed by Berker Peksag in :issue:`27331`.)
   1031 
   1032 The :class:`~email.generator.DecodedGenerator` now supports the *policy*
   1033 keyword.
   1034 
   1035 There is a new :mod:`~email.policy` attribute,
   1036 :attr:`~email.policy.Policy.message_factory`, that controls what class is used
   1037 by default when the parser creates new message objects.  For the
   1038 :attr:`email.policy.compat32` policy this is :class:`~email.message.Message`,
   1039 for the new policies it is :class:`~email.message.EmailMessage`.
   1040 (Contributed by R. David Murray in :issue:`20476`.)
   1041 
   1042 
   1043 encodings
   1044 ---------
   1045 
   1046 On Windows, added the ``'oem'`` encoding to use ``CP_OEMCP``, and the ``'ansi'``
   1047 alias for the existing ``'mbcs'`` encoding, which uses the ``CP_ACP`` code page.
   1048 (Contributed by Steve Dower in :issue:`27959`.)
   1049 
   1050 
   1051 enum
   1052 ----
   1053 
   1054 Two new enumeration base classes have been added to the :mod:`enum` module:
   1055 :class:`~enum.Flag` and :class:`~enum.IntFlags`.  Both are used to define
   1056 constants that can be combined using the bitwise operators.
   1057 (Contributed by Ethan Furman in :issue:`23591`.)
   1058 
   1059 Many standard library modules have been updated to use the
   1060 :class:`~enum.IntFlags` class for their constants.
   1061 
   1062 The new :class:`enum.auto` value can be used to assign values to enum
   1063 members automatically::
   1064 
   1065     >>> from enum import Enum, auto
   1066     >>> class Color(Enum):
   1067     ...     red = auto()
   1068     ...     blue = auto()
   1069     ...     green = auto()
   1070     ...
   1071     >>> list(Color)
   1072     [<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>]
   1073 
   1074 
   1075 faulthandler
   1076 ------------
   1077 
   1078 On Windows, the :mod:`faulthandler` module now installs a handler for Windows
   1079 exceptions: see :func:`faulthandler.enable`. (Contributed by Victor Stinner in
   1080 :issue:`23848`.)
   1081 
   1082 
   1083 fileinput
   1084 ---------
   1085 
   1086 :func:`~fileinput.hook_encoded` now supports the *errors* argument.
   1087 (Contributed by Joseph Hackman in :issue:`25788`.)
   1088 
   1089 
   1090 hashlib
   1091 -------
   1092 
   1093 :mod:`hashlib` supports OpenSSL 1.1.0.  The minimum recommend version is 1.0.2.
   1094 (Contributed by Christian Heimes in :issue:`26470`.)
   1095 
   1096 BLAKE2 hash functions were added to the module. :func:`~hashlib.blake2b`
   1097 and :func:`~hashlib.blake2s` are always available and support the full
   1098 feature set of BLAKE2.
   1099 (Contributed by Christian Heimes in :issue:`26798` based on code by
   1100 Dmitry Chestnykh and Samuel Neves. Documentation written by Dmitry Chestnykh.)
   1101 
   1102 The SHA-3 hash functions :func:`~hashlib.sha3_224`, :func:`~hashlib.sha3_256`,
   1103 :func:`~hashlib.sha3_384`, :func:`~hashlib.sha3_512`, and SHAKE hash functions
   1104 :func:`~hashlib.shake_128` and :func:`~hashlib.shake_256` were added.
   1105 (Contributed by Christian Heimes in :issue:`16113`. Keccak Code Package
   1106 by Guido Bertoni, Joan Daemen, Michal Peeters, Gilles Van Assche, and
   1107 Ronny Van Keer.)
   1108 
   1109 The password-based key derivation function :func:`~hashlib.scrypt` is now
   1110 available with OpenSSL 1.1.0 and newer.
   1111 (Contributed by Christian Heimes in :issue:`27928`.)
   1112 
   1113 http.client
   1114 -----------
   1115 
   1116 :meth:`HTTPConnection.request() <http.client.HTTPConnection.request>` and
   1117 :meth:`~http.client.HTTPConnection.endheaders` both now support
   1118 chunked encoding request bodies.
   1119 (Contributed by Demian Brecht and Rolf Krahl in :issue:`12319`.)
   1120 
   1121 
   1122 idlelib and IDLE
   1123 ----------------
   1124 
   1125 The idlelib package is being modernized and refactored to make IDLE look and
   1126 work better and to make the code easier to understand, test, and improve. Part
   1127 of making IDLE look better, especially on Linux and Mac, is using ttk widgets,
   1128 mostly in the dialogs.  As a result, IDLE no longer runs with tcl/tk 8.4.  It
   1129 now requires tcl/tk 8.5 or 8.6.  We recommend running the latest release of
   1130 either.
   1131 
   1132 'Modernizing' includes renaming and consolidation of idlelib modules. The
   1133 renaming of files with partial uppercase names is similar to the renaming of,
   1134 for instance, Tkinter and TkFont to tkinter and tkinter.font in 3.0.  As a
   1135 result, imports of idlelib files that worked in 3.5 will usually not work in
   1136 3.6.  At least a module name change will be needed (see idlelib/README.txt),
   1137 sometimes more.  (Name changes contributed by Al Swiegart and Terry Reedy in
   1138 :issue:`24225`.  Most idlelib patches since have been and will be part of the
   1139 process.)
   1140 
   1141 In compensation, the eventual result with be that some idlelib classes will be
   1142 easier to use, with better APIs and docstrings explaining them.  Additional
   1143 useful information will be added to idlelib when available.
   1144 
   1145 New in 3.6.2:
   1146 
   1147 Multiple fixes for autocompletion. (Contributed by Louie Lu in :issue:`15786`.)
   1148 
   1149 New in 3.6.3:
   1150 
   1151 Module Browser (on the File menu, formerly called Class Browser),
   1152 now displays nested functions and classes in addition to top-level
   1153 functions and classes.
   1154 (Contributed by Guilherme Polo, Cheryl Sabella, and Terry Jan Reedy
   1155 in :issue:`1612262`.)
   1156 
   1157 The IDLE features formerly implemented as extensions have been reimplemented
   1158 as normal features.  Their settings have been moved from the Extensions tab
   1159 to other dialog tabs.
   1160 (Contributed by Charles Wohlganger and Terry Jan Reedy in :issue:`27099`.)
   1161 
   1162 The Settings dialog (Options, Configure IDLE) has been partly rewritten
   1163 to improve both appearance and function.
   1164 (Contributed by Cheryl Sabella and Terry Jan Reedy in multiple issues.)
   1165 
   1166 New in 3.6.4:
   1167 
   1168 The font sample now includes a selection of non-Latin characters so that
   1169 users can better see the effect of selecting a particular font.
   1170 (Contributed by Terry Jan Reedy in :issue:`13802`.)
   1171 The sample can be edited to include other characters.
   1172 (Contributed by Serhiy Storchaka in :issue:`31860`.)
   1173 
   1174 New in 3.6.6:
   1175 
   1176 Editor code context option revised.  Box displays all context lines up to
   1177 maxlines.  Clicking on a context line jumps the editor to that line.  Context
   1178 colors for custom themes is added to Highlights tab of Settings dialog.
   1179 (Contributed by Cheryl Sabella and Terry Jan Reedy in :issue:`33642`,
   1180 :issue:`33768`, and :issue:`33679`.)
   1181 
   1182 On Windows, a new API call tells Windows that tk scales for DPI. On Windows
   1183 8.1+ or 10, with DPI compatibility properties of the Python binary
   1184 unchanged, and a monitor resolution greater than 96 DPI, this should
   1185 make text and lines sharper.  It should otherwise have no effect.
   1186 (Contributed by Terry Jan Reedy in :issue:`33656`.)
   1187 
   1188 New in 3.6.7:
   1189 
   1190 Output over N lines (50 by default) is squeezed down to a button.
   1191 N can be changed in the PyShell section of the General page of the
   1192 Settings dialog.  Fewer, but possibly extra long, lines can be squeezed by
   1193 right clicking on the output.  Squeezed output can be expanded in place
   1194 by double-clicking the button or into the clipboard or a separate window
   1195 by right-clicking the button.  (Contributed by Tal Einat in :issue:`1529353`.)
   1196 
   1197 
   1198 importlib
   1199 ---------
   1200 
   1201 Import now raises the new exception :exc:`ModuleNotFoundError`
   1202 (subclass of :exc:`ImportError`) when it cannot find a module.  Code
   1203 that current checks for ``ImportError`` (in try-except) will still work.
   1204 (Contributed by Eric Snow in :issue:`15767`.)
   1205 
   1206 :class:`importlib.util.LazyLoader` now calls
   1207 :meth:`~importlib.abc.Loader.create_module` on the wrapped loader, removing the
   1208 restriction that :class:`importlib.machinery.BuiltinImporter` and
   1209 :class:`importlib.machinery.ExtensionFileLoader` couldn't be used with
   1210 :class:`importlib.util.LazyLoader`.
   1211 
   1212 :func:`importlib.util.cache_from_source`,
   1213 :func:`importlib.util.source_from_cache`, and
   1214 :func:`importlib.util.spec_from_file_location` now accept a
   1215 :term:`path-like object`.
   1216 
   1217 
   1218 inspect
   1219 -------
   1220 
   1221 The :func:`inspect.signature() <inspect.signature>` function now reports the
   1222 implicit ``.0`` parameters generated by the compiler for comprehension and
   1223 generator expression scopes as if they were positional-only parameters called
   1224 ``implicit0``. (Contributed by Jelle Zijlstra in :issue:`19611`.)
   1225 
   1226 To reduce code churn when upgrading from Python 2.7 and the legacy
   1227 :func:`inspect.getargspec` API, the previously documented deprecation of
   1228 :func:`inspect.getfullargspec` has been reversed. While this function is
   1229 convenient for single/source Python 2/3 code bases, the richer
   1230 :func:`inspect.signature` interface remains the recommended approach for new
   1231 code. (Contributed by Nick Coghlan in :issue:`27172`)
   1232 
   1233 
   1234 json
   1235 ----
   1236 
   1237 :func:`json.load` and :func:`json.loads` now support binary input.  Encoded
   1238 JSON should be represented using either UTF-8, UTF-16, or UTF-32.
   1239 (Contributed by Serhiy Storchaka in :issue:`17909`.)
   1240 
   1241 
   1242 logging
   1243 -------
   1244 
   1245 The new :meth:`WatchedFileHandler.reopenIfNeeded() <logging.handlers.WatchedFileHandler.reopenIfNeeded>`
   1246 method has been added to add the ability to check if the log file needs to
   1247 be reopened.
   1248 (Contributed by Marian Horban in :issue:`24884`.)
   1249 
   1250 
   1251 math
   1252 ----
   1253 
   1254 The tau (**) constant has been added to the :mod:`math` and :mod:`cmath`
   1255 modules.
   1256 (Contributed by Lisa Roach in :issue:`12345`, see :pep:`628` for details.)
   1257 
   1258 
   1259 multiprocessing
   1260 ---------------
   1261 
   1262 :ref:`Proxy Objects <multiprocessing-proxy_objects>` returned by
   1263 :func:`multiprocessing.Manager` can now be nested.
   1264 (Contributed by Davin Potts in :issue:`6766`.)
   1265 
   1266 
   1267 os
   1268 --
   1269 
   1270 See the summary of :ref:`PEP 519 <whatsnew36-pep519>` for details on how the
   1271 :mod:`os` and :mod:`os.path` modules now support
   1272 :term:`path-like objects <path-like object>`.
   1273 
   1274 :func:`~os.scandir` now supports :class:`bytes` paths on Windows.
   1275 
   1276 A new :meth:`~os.scandir.close` method allows explicitly closing a
   1277 :func:`~os.scandir` iterator.  The :func:`~os.scandir` iterator now
   1278 supports the :term:`context manager` protocol.  If a :func:`scandir`
   1279 iterator is neither exhausted nor explicitly closed a :exc:`ResourceWarning`
   1280 will be emitted in its destructor.
   1281 (Contributed by Serhiy Storchaka in :issue:`25994`.)
   1282 
   1283 On Linux, :func:`os.urandom` now blocks until the system urandom entropy pool
   1284 is initialized to increase the security. See the :pep:`524` for the rationale.
   1285 
   1286 The Linux ``getrandom()`` syscall (get random bytes) is now exposed as the new
   1287 :func:`os.getrandom` function.
   1288 (Contributed by Victor Stinner, part of the :pep:`524`)
   1289 
   1290 
   1291 pathlib
   1292 -------
   1293 
   1294 :mod:`pathlib` now supports :term:`path-like objects <path-like object>`.
   1295 (Contributed by Brett Cannon in :issue:`27186`.)
   1296 
   1297 See the summary of :ref:`PEP 519 <whatsnew36-pep519>` for details.
   1298 
   1299 
   1300 pdb
   1301 ---
   1302 
   1303 The :class:`~pdb.Pdb` class constructor has a new optional *readrc* argument
   1304 to control whether ``.pdbrc`` files should be read.
   1305 
   1306 
   1307 pickle
   1308 ------
   1309 
   1310 Objects that need ``__new__`` called with keyword arguments can now be pickled
   1311 using :ref:`pickle protocols <pickle-protocols>` older than protocol version 4.
   1312 Protocol version 4 already supports this case.  (Contributed by Serhiy
   1313 Storchaka in :issue:`24164`.)
   1314 
   1315 
   1316 pickletools
   1317 -----------
   1318 
   1319 :func:`pickletools.dis()` now outputs the implicit memo index for the
   1320 ``MEMOIZE`` opcode.
   1321 (Contributed by Serhiy Storchaka in :issue:`25382`.)
   1322 
   1323 
   1324 pydoc
   1325 -----
   1326 
   1327 The :mod:`pydoc` module has learned to respect the ``MANPAGER``
   1328 environment variable.
   1329 (Contributed by Matthias Klose in :issue:`8637`.)
   1330 
   1331 :func:`help` and :mod:`pydoc` can now list named tuple fields in the
   1332 order they were defined rather than alphabetically.
   1333 (Contributed by Raymond Hettinger in :issue:`24879`.)
   1334 
   1335 
   1336 random
   1337 -------
   1338 
   1339 The new :func:`~random.choices` function returns a list of elements of
   1340 specified size from the given population with optional weights.
   1341 (Contributed by Raymond Hettinger in :issue:`18844`.)
   1342 
   1343 
   1344 re
   1345 --
   1346 
   1347 Added support of modifier spans in regular expressions.  Examples:
   1348 ``'(?i:p)ython'`` matches ``'python'`` and ``'Python'``, but not ``'PYTHON'``;
   1349 ``'(?i)g(?-i:v)r'`` matches ``'GvR'`` and ``'gvr'``, but not ``'GVR'``.
   1350 (Contributed by Serhiy Storchaka in :issue:`433028`.)
   1351 
   1352 Match object groups can be accessed by ``__getitem__``, which is
   1353 equivalent to ``group()``.  So ``mo['name']`` is now equivalent to
   1354 ``mo.group('name')``.  (Contributed by Eric Smith in :issue:`24454`.)
   1355 
   1356 :class:`~re.Match` objects now support
   1357 :meth:`index-like objects <object.__index__>` as group
   1358 indices.
   1359 (Contributed by Jeroen Demeyer and Xiang Zhang in :issue:`27177`.)
   1360 
   1361 
   1362 readline
   1363 --------
   1364 
   1365 Added :func:`~readline.set_auto_history` to enable or disable
   1366 automatic addition of input to the history list.  (Contributed by
   1367 Tyler Crompton in :issue:`26870`.)
   1368 
   1369 
   1370 rlcompleter
   1371 -----------
   1372 
   1373 Private and special attribute names now are omitted unless the prefix starts
   1374 with underscores.  A space or a colon is added after some completed keywords.
   1375 (Contributed by Serhiy Storchaka in :issue:`25011` and :issue:`25209`.)
   1376 
   1377 
   1378 shlex
   1379 -----
   1380 
   1381 The :class:`~shlex.shlex` has much
   1382 :ref:`improved shell compatibility <improved-shell-compatibility>`
   1383 through the new *punctuation_chars* argument to control which characters
   1384 are treated as punctuation.
   1385 (Contributed by Vinay Sajip in :issue:`1521950`.)
   1386 
   1387 
   1388 site
   1389 ----
   1390 
   1391 When specifying paths to add to :attr:`sys.path` in a `.pth` file,
   1392 you may now specify file paths on top of directories (e.g. zip files).
   1393 (Contributed by Wolfgang Langner in :issue:`26587`).
   1394 
   1395 
   1396 sqlite3
   1397 -------
   1398 
   1399 :attr:`sqlite3.Cursor.lastrowid` now supports the ``REPLACE`` statement.
   1400 (Contributed by Alex LordThorsen in :issue:`16864`.)
   1401 
   1402 
   1403 socket
   1404 ------
   1405 
   1406 The :func:`~socket.socket.ioctl` function now supports the
   1407 :data:`~socket.SIO_LOOPBACK_FAST_PATH` control code.
   1408 (Contributed by Daniel Stokes in :issue:`26536`.)
   1409 
   1410 The :meth:`~socket.socket.getsockopt` constants ``SO_DOMAIN``,
   1411 ``SO_PROTOCOL``, ``SO_PEERSEC``, and ``SO_PASSSEC`` are now supported.
   1412 (Contributed by Christian Heimes in :issue:`26907`.)
   1413 
   1414 The :meth:`~socket.socket.setsockopt` now supports the
   1415 ``setsockopt(level, optname, None, optlen: int)`` form.
   1416 (Contributed by Christian Heimes in :issue:`27744`.)
   1417 
   1418 The socket module now supports the address family
   1419 :data:`~socket.AF_ALG` to interface with Linux Kernel crypto API. ``ALG_*``,
   1420 ``SOL_ALG`` and :meth:`~socket.socket.sendmsg_afalg` were added.
   1421 (Contributed by Christian Heimes in :issue:`27744` with support from
   1422 Victor Stinner.)
   1423 
   1424 New Linux constants ``TCP_USER_TIMEOUT`` and ``TCP_CONGESTION`` were added.
   1425 (Contributed by Omar Sandoval, issue:`26273`).
   1426 
   1427 
   1428 socketserver
   1429 ------------
   1430 
   1431 Servers based on the :mod:`socketserver` module, including those
   1432 defined in :mod:`http.server`, :mod:`xmlrpc.server` and
   1433 :mod:`wsgiref.simple_server`, now support the :term:`context manager`
   1434 protocol.
   1435 (Contributed by Aviv Palivoda in :issue:`26404`.)
   1436 
   1437 The :attr:`~socketserver.StreamRequestHandler.wfile` attribute of
   1438 :class:`~socketserver.StreamRequestHandler` classes now implements
   1439 the :class:`io.BufferedIOBase` writable interface.  In particular,
   1440 calling :meth:`~io.BufferedIOBase.write` is now guaranteed to send the
   1441 data in full.  (Contributed by Martin Panter in :issue:`26721`.)
   1442 
   1443 
   1444 ssl
   1445 ---
   1446 
   1447 :mod:`ssl` supports OpenSSL 1.1.0.  The minimum recommend version is 1.0.2.
   1448 (Contributed by Christian Heimes in :issue:`26470`.)
   1449 
   1450 3DES has been removed from the default cipher suites and ChaCha20 Poly1305
   1451 cipher suites have been added.
   1452 (Contributed by Christian Heimes in :issue:`27850` and :issue:`27766`.)
   1453 
   1454 :class:`~ssl.SSLContext` has better default configuration for options
   1455 and ciphers.
   1456 (Contributed by Christian Heimes in :issue:`28043`.)
   1457 
   1458 SSL session can be copied from one client-side connection to another
   1459 with the new :class:`~ssl.SSLSession` class.  TLS session resumption can
   1460 speed up the initial handshake, reduce latency and improve performance
   1461 (Contributed by Christian Heimes in :issue:`19500` based on a draft by
   1462 Alex Warhawk.)
   1463 
   1464 The new :meth:`~ssl.SSLContext.get_ciphers` method can be used to
   1465 get a list of enabled ciphers in order of cipher priority.
   1466 
   1467 All constants and flags have been converted to :class:`~enum.IntEnum` and
   1468 :class:`~enum.IntFlags`.
   1469 (Contributed by Christian Heimes in :issue:`28025`.)
   1470 
   1471 Server and client-side specific TLS protocols for :class:`~ssl.SSLContext`
   1472 were added.
   1473 (Contributed by Christian Heimes in :issue:`28085`.)
   1474 
   1475 
   1476 statistics
   1477 ----------
   1478 
   1479 A new :func:`~statistics.harmonic_mean` function has been added.
   1480 (Contributed by Steven D'Aprano in :issue:`27181`.)
   1481 
   1482 
   1483 struct
   1484 ------
   1485 
   1486 :mod:`struct` now supports IEEE 754 half-precision floats via the ``'e'``
   1487 format specifier.
   1488 (Contributed by Eli Stevens, Mark Dickinson in :issue:`11734`.)
   1489 
   1490 
   1491 subprocess
   1492 ----------
   1493 
   1494 :class:`subprocess.Popen` destructor now emits a :exc:`ResourceWarning` warning
   1495 if the child process is still running. Use the context manager protocol (``with
   1496 proc: ...``) or explicitly call the :meth:`~subprocess.Popen.wait` method to
   1497 read the exit status of the child process. (Contributed by Victor Stinner in
   1498 :issue:`26741`.)
   1499 
   1500 The :class:`subprocess.Popen` constructor and all functions that pass arguments
   1501 through to it now accept *encoding* and *errors* arguments. Specifying either
   1502 of these will enable text mode for the *stdin*, *stdout* and *stderr* streams.
   1503 (Contributed by Steve Dower in :issue:`6135`.)
   1504 
   1505 
   1506 sys
   1507 ---
   1508 
   1509 The new :func:`~sys.getfilesystemencodeerrors` function returns the name of
   1510 the error mode used to convert between Unicode filenames and bytes filenames.
   1511 (Contributed by Steve Dower in :issue:`27781`.)
   1512 
   1513 On Windows the return value of the :func:`~sys.getwindowsversion` function
   1514 now includes the *platform_version* field which contains the accurate major
   1515 version, minor version and build number of the current operating system,
   1516 rather than the version that is being emulated for the process
   1517 (Contributed by Steve Dower in :issue:`27932`.)
   1518 
   1519 
   1520 telnetlib
   1521 ---------
   1522 
   1523 :class:`~telnetlib.Telnet` is now a context manager (contributed by
   1524 Stphane Wirtel in :issue:`25485`).
   1525 
   1526 
   1527 time
   1528 ----
   1529 
   1530 The :class:`~time.struct_time` attributes :attr:`tm_gmtoff` and
   1531 :attr:`tm_zone` are now available on all platforms.
   1532 
   1533 
   1534 timeit
   1535 ------
   1536 
   1537 The new :meth:`Timer.autorange() <timeit.Timer.autorange>` convenience
   1538 method has been added to call :meth:`Timer.timeit() <timeit.Timer.timeit>`
   1539 repeatedly so that the total run time is greater or equal to 200 milliseconds.
   1540 (Contributed by Steven D'Aprano in :issue:`6422`.)
   1541 
   1542 :mod:`timeit` now warns when there is substantial (4x) variance
   1543 between best and worst times.
   1544 (Contributed by Serhiy Storchaka in :issue:`23552`.)
   1545 
   1546 
   1547 tkinter
   1548 -------
   1549 
   1550 Added methods :meth:`~tkinter.Variable.trace_add`,
   1551 :meth:`~tkinter.Variable.trace_remove` and :meth:`~tkinter.Variable.trace_info`
   1552 in the :class:`tkinter.Variable` class.  They replace old methods
   1553 :meth:`~tkinter.Variable.trace_variable`, :meth:`~tkinter.Variable.trace`,
   1554 :meth:`~tkinter.Variable.trace_vdelete` and
   1555 :meth:`~tkinter.Variable.trace_vinfo` that use obsolete Tcl commands and might
   1556 not work in future versions of Tcl.
   1557 (Contributed by Serhiy Storchaka in :issue:`22115`).
   1558 
   1559 
   1560 .. _whatsnew36-traceback:
   1561 
   1562 traceback
   1563 ---------
   1564 
   1565 Both the traceback module and the interpreter's builtin exception display now
   1566 abbreviate long sequences of repeated lines in tracebacks as shown in the
   1567 following example::
   1568 
   1569     >>> def f(): f()
   1570     ...
   1571     >>> f()
   1572     Traceback (most recent call last):
   1573       File "<stdin>", line 1, in <module>
   1574       File "<stdin>", line 1, in f
   1575       File "<stdin>", line 1, in f
   1576       File "<stdin>", line 1, in f
   1577       [Previous line repeated 995 more times]
   1578     RecursionError: maximum recursion depth exceeded
   1579 
   1580 (Contributed by Emanuel Barry in :issue:`26823`.)
   1581 
   1582 
   1583 tracemalloc
   1584 -----------
   1585 
   1586 The :mod:`tracemalloc` module now supports tracing memory allocations in
   1587 multiple different address spaces.
   1588 
   1589 The new :class:`~tracemalloc.DomainFilter` filter class has been added
   1590 to filter block traces by their address space (domain).
   1591 
   1592 (Contributed by Victor Stinner in :issue:`26588`.)
   1593 
   1594 
   1595 .. _whatsnew36-typing:
   1596 
   1597 typing
   1598 ------
   1599 
   1600 Since the :mod:`typing` module is :term:`provisional <provisional api>`,
   1601 all changes introduced in Python 3.6 have also been
   1602 backported to Python 3.5.x.
   1603 
   1604 The :mod:`typing` module has a much improved support for generic type
   1605 aliases.  For example ``Dict[str, Tuple[S, T]]`` is now a valid
   1606 type annotation.
   1607 (Contributed by Guido van Rossum in `Github #195
   1608 <https://github.com/python/typing/pull/195>`_.)
   1609 
   1610 The :class:`typing.ContextManager` class has been added for
   1611 representing :class:`contextlib.AbstractContextManager`.
   1612 (Contributed by Brett Cannon in :issue:`25609`.)
   1613 
   1614 The :class:`typing.Collection` class has been added for
   1615 representing :class:`collections.abc.Collection`.
   1616 (Contributed by Ivan Levkivskyi in :issue:`27598`.)
   1617 
   1618 The :const:`typing.ClassVar` type construct has been added to
   1619 mark class variables.  As introduced in :pep:`526`, a variable annotation
   1620 wrapped in ClassVar indicates that a given attribute is intended to be used as
   1621 a class variable and should not be set on instances of that class.
   1622 (Contributed by Ivan Levkivskyi in `Github #280
   1623 <https://github.com/python/typing/pull/280>`_.)
   1624 
   1625 A new :const:`~typing.TYPE_CHECKING` constant that is assumed to be
   1626 ``True`` by the static type checkers, but is ``False`` at runtime.
   1627 (Contributed by Guido van Rossum in `Github #230
   1628 <https://github.com/python/typing/issues/230>`_.)
   1629 
   1630 A new :func:`~typing.NewType` helper function has been added to create
   1631 lightweight distinct types for annotations::
   1632 
   1633     from typing import NewType
   1634 
   1635     UserId = NewType('UserId', int)
   1636     some_id = UserId(524313)
   1637 
   1638 The static type checker will treat the new type as if it were a subclass
   1639 of the original type.  (Contributed by Ivan Levkivskyi in `Github #189
   1640 <https://github.com/python/typing/issues/189>`_.)
   1641 
   1642 
   1643 unicodedata
   1644 -----------
   1645 
   1646 The :mod:`unicodedata` module now uses data from `Unicode 9.0.0
   1647 <http://unicode.org/versions/Unicode9.0.0/>`_.
   1648 (Contributed by Benjamin Peterson.)
   1649 
   1650 
   1651 unittest.mock
   1652 -------------
   1653 
   1654 The :class:`~unittest.mock.Mock` class has the following improvements:
   1655 
   1656 * Two new methods, :meth:`Mock.assert_called()
   1657   <unittest.mock.Mock.assert_called>` and :meth:`Mock.assert_called_once()
   1658   <unittest.mock.Mock.assert_called_once>` to check if the mock object
   1659   was called.
   1660   (Contributed by Amit Saha in :issue:`26323`.)
   1661 
   1662 * The :meth:`Mock.reset_mock() <unittest.mock.Mock.reset_mock>` method
   1663   now has two optional keyword only arguments: *return_value* and
   1664   *side_effect*.
   1665   (Contributed by Kushal Das in :issue:`21271`.)
   1666 
   1667 
   1668 urllib.request
   1669 --------------
   1670 
   1671 If a HTTP request has a file or iterable body (other than a
   1672 bytes object) but no ``Content-Length`` header, rather than
   1673 throwing an error, :class:`~urllib.request.AbstractHTTPHandler` now
   1674 falls back to use chunked transfer encoding.
   1675 (Contributed by Demian Brecht and Rolf Krahl in :issue:`12319`.)
   1676 
   1677 
   1678 urllib.robotparser
   1679 ------------------
   1680 
   1681 :class:`~urllib.robotparser.RobotFileParser` now supports the ``Crawl-delay`` and
   1682 ``Request-rate`` extensions.
   1683 (Contributed by Nikolay Bogoychev in :issue:`16099`.)
   1684 
   1685 
   1686 venv
   1687 ----
   1688 
   1689 :mod:`venv` accepts a new parameter ``--prompt``. This parameter provides an
   1690 alternative prefix for the virtual environment. (Proposed by ukasz Balcerzak
   1691 and ported to 3.6 by Stphane Wirtel in :issue:`22829`.)
   1692 
   1693 
   1694 warnings
   1695 --------
   1696 
   1697 A new optional *source* parameter has been added to the
   1698 :func:`warnings.warn_explicit` function: the destroyed object which emitted a
   1699 :exc:`ResourceWarning`. A *source* attribute has also been added to
   1700 :class:`warnings.WarningMessage` (contributed by Victor Stinner in
   1701 :issue:`26568` and :issue:`26567`).
   1702 
   1703 When a :exc:`ResourceWarning` warning is logged, the :mod:`tracemalloc` module is now
   1704 used to try to retrieve the traceback where the destroyed object was allocated.
   1705 
   1706 Example with the script ``example.py``::
   1707 
   1708     import warnings
   1709 
   1710     def func():
   1711         return open(__file__)
   1712 
   1713     f = func()
   1714     f = None
   1715 
   1716 Output of the command ``python3.6 -Wd -X tracemalloc=5 example.py``::
   1717 
   1718     example.py:7: ResourceWarning: unclosed file <_io.TextIOWrapper name='example.py' mode='r' encoding='UTF-8'>
   1719       f = None
   1720     Object allocated at (most recent call first):
   1721       File "example.py", lineno 4
   1722         return open(__file__)
   1723       File "example.py", lineno 6
   1724         f = func()
   1725 
   1726 The "Object allocated at" traceback is new and is only displayed if
   1727 :mod:`tracemalloc` is tracing Python memory allocations and if the
   1728 :mod:`warnings` module was already imported.
   1729 
   1730 
   1731 winreg
   1732 ------
   1733 
   1734 Added the 64-bit integer type :data:`REG_QWORD <winreg.REG_QWORD>`.
   1735 (Contributed by Clement Rouault in :issue:`23026`.)
   1736 
   1737 
   1738 winsound
   1739 --------
   1740 
   1741 Allowed keyword arguments to be passed to :func:`Beep <winsound.Beep>`,
   1742 :func:`MessageBeep <winsound.MessageBeep>`, and :func:`PlaySound
   1743 <winsound.PlaySound>` (:issue:`27982`).
   1744 
   1745 
   1746 xmlrpc.client
   1747 -------------
   1748 
   1749 The :mod:`xmlrpc.client` module now supports unmarshalling
   1750 additional data types used by the Apache XML-RPC implementation
   1751 for numerics and ``None``.
   1752 (Contributed by Serhiy Storchaka in :issue:`26885`.)
   1753 
   1754 
   1755 zipfile
   1756 -------
   1757 
   1758 A new :meth:`ZipInfo.from_file() <zipfile.ZipInfo.from_file>` class method
   1759 allows making a :class:`~zipfile.ZipInfo` instance from a filesystem file.
   1760 A new :meth:`ZipInfo.is_dir() <zipfile.ZipInfo.is_dir>` method can be used
   1761 to check if the :class:`~zipfile.ZipInfo` instance represents a directory.
   1762 (Contributed by Thomas Kluyver in :issue:`26039`.)
   1763 
   1764 The :meth:`ZipFile.open() <zipfile.ZipFile.open>` method can now be used to
   1765 write data into a ZIP file, as well as for extracting data.
   1766 (Contributed by Thomas Kluyver in :issue:`26039`.)
   1767 
   1768 
   1769 zlib
   1770 ----
   1771 
   1772 The :func:`~zlib.compress` and :func:`~zlib.decompress` functions now accept
   1773 keyword arguments.
   1774 (Contributed by Aviv Palivoda in :issue:`26243` and
   1775 Xiang Zhang in :issue:`16764` respectively.)
   1776 
   1777 
   1778 Optimizations
   1779 =============
   1780 
   1781 * The Python interpreter now uses a 16-bit wordcode instead of bytecode which
   1782   made a number of opcode optimizations possible.
   1783   (Contributed by Demur Rumed with input and reviews from
   1784   Serhiy Storchaka and Victor Stinner in :issue:`26647` and :issue:`28050`.)
   1785 
   1786 * The :class:`asyncio.Future` class now has an optimized C implementation.
   1787   (Contributed by Yury Selivanov and INADA Naoki in :issue:`26081`.)
   1788 
   1789 * The :class:`asyncio.Task` class now has an optimized
   1790   C implementation. (Contributed by Yury Selivanov in :issue:`28544`.)
   1791 
   1792 * Various implementation improvements in the :mod:`typing` module
   1793   (such as caching of generic types) allow up to 30 times performance
   1794   improvements and reduced memory footprint.
   1795 
   1796 * The ASCII decoder is now up to 60 times as fast for error handlers
   1797   ``surrogateescape``, ``ignore`` and ``replace`` (Contributed
   1798   by Victor Stinner in :issue:`24870`).
   1799 
   1800 * The ASCII and the Latin1 encoders are now up to 3 times as fast for the
   1801   error handler ``surrogateescape``
   1802   (Contributed by Victor Stinner in :issue:`25227`).
   1803 
   1804 * The UTF-8 encoder is now up to 75 times as fast for error handlers
   1805   ``ignore``, ``replace``, ``surrogateescape``, ``surrogatepass`` (Contributed
   1806   by Victor Stinner in :issue:`25267`).
   1807 
   1808 * The UTF-8 decoder is now up to 15 times as fast for error handlers
   1809   ``ignore``, ``replace`` and ``surrogateescape`` (Contributed
   1810   by Victor Stinner in :issue:`25301`).
   1811 
   1812 * ``bytes % args`` is now up to 2 times faster. (Contributed by Victor Stinner
   1813   in :issue:`25349`).
   1814 
   1815 * ``bytearray % args`` is now between 2.5 and 5 times faster. (Contributed by
   1816   Victor Stinner in :issue:`25399`).
   1817 
   1818 * Optimize :meth:`bytes.fromhex` and :meth:`bytearray.fromhex`: they are now
   1819   between 2x and 3.5x faster. (Contributed by Victor Stinner in :issue:`25401`).
   1820 
   1821 * Optimize ``bytes.replace(b'', b'.')`` and ``bytearray.replace(b'', b'.')``:
   1822   up to 80% faster. (Contributed by Josh Snider in :issue:`26574`).
   1823 
   1824 * Allocator functions of the :c:func:`PyMem_Malloc` domain
   1825   (:c:data:`PYMEM_DOMAIN_MEM`) now use the :ref:`pymalloc memory allocator
   1826   <pymalloc>` instead of :c:func:`malloc` function of the C library. The
   1827   pymalloc allocator is optimized for objects smaller or equal to 512 bytes
   1828   with a short lifetime, and use :c:func:`malloc` for larger memory blocks.
   1829   (Contributed by Victor Stinner in :issue:`26249`).
   1830 
   1831 * :func:`pickle.load` and :func:`pickle.loads` are now up to 10% faster when
   1832   deserializing many small objects (Contributed by Victor Stinner in
   1833   :issue:`27056`).
   1834 
   1835 * Passing :term:`keyword arguments <keyword argument>` to a function has an
   1836   overhead in comparison with passing :term:`positional arguments
   1837   <positional argument>`.  Now in extension functions implemented with using
   1838   Argument Clinic this overhead is significantly decreased.
   1839   (Contributed by Serhiy Storchaka in :issue:`27574`).
   1840 
   1841 * Optimized :func:`~glob.glob` and :func:`~glob.iglob` functions in the
   1842   :mod:`glob` module; they are now about 3--6 times faster.
   1843   (Contributed by Serhiy Storchaka in :issue:`25596`).
   1844 
   1845 * Optimized globbing in :mod:`pathlib` by using :func:`os.scandir`;
   1846   it is now about 1.5--4 times faster.
   1847   (Contributed by Serhiy Storchaka in :issue:`26032`).
   1848 
   1849 * :class:`xml.etree.ElementTree` parsing, iteration and deepcopy performance
   1850   has been significantly improved.
   1851   (Contributed by Serhiy Storchaka in :issue:`25638`, :issue:`25873`,
   1852   and :issue:`25869`.)
   1853 
   1854 * Creation of :class:`fractions.Fraction` instances from floats and
   1855   decimals is now 2 to 3 times faster.
   1856   (Contributed by Serhiy Storchaka in :issue:`25971`.)
   1857 
   1858 
   1859 Build and C API Changes
   1860 =======================
   1861 
   1862 * Python now requires some C99 support in the toolchain to build.
   1863   Most notably, Python now uses standard integer types and macros in
   1864   place of custom macros like ``PY_LONG_LONG``.
   1865   For more information, see :pep:`7` and :issue:`17884`.
   1866 
   1867 * Cross-compiling CPython with the Android NDK and the Android API level set to
   1868   21 (Android 5.0 Lollipop) or greater runs successfully. While Android is not
   1869   yet a supported platform, the Python test suite runs on the Android emulator
   1870   with only about 16 tests failures. See the Android meta-issue :issue:`26865`.
   1871 
   1872 * The ``--enable-optimizations`` configure flag has been added. Turning it on
   1873   will activate expensive optimizations like PGO.
   1874   (Original patch by Alecsandru Patrascu of Intel in :issue:`26359`.)
   1875 
   1876 * The :term:`GIL <global interpreter lock>` must now be held when allocator
   1877   functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and
   1878   :c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called.
   1879 
   1880 * New :c:func:`Py_FinalizeEx` API which indicates if flushing buffered data
   1881   failed.
   1882   (Contributed by Martin Panter in :issue:`5319`.)
   1883 
   1884 * :c:func:`PyArg_ParseTupleAndKeywords` now supports :ref:`positional-only
   1885   parameters <positional-only_parameter>`.  Positional-only parameters are
   1886   defined by empty names.
   1887   (Contributed by Serhiy Storchaka in :issue:`26282`).
   1888 
   1889 * ``PyTraceback_Print`` method now abbreviates long sequences of repeated lines
   1890   as ``"[Previous line repeated {count} more times]"``.
   1891   (Contributed by Emanuel Barry in :issue:`26823`.)
   1892 
   1893 * The new :c:func:`PyErr_SetImportErrorSubclass` function allows for
   1894   specifying a subclass of :exc:`ImportError` to raise.
   1895   (Contributed by Eric Snow in :issue:`15767`.)
   1896 
   1897 * The new :c:func:`PyErr_ResourceWarning` function can be used to generate
   1898   a :exc:`ResourceWarning` providing the source of the resource allocation.
   1899   (Contributed by Victor Stinner in :issue:`26567`.)
   1900 
   1901 * The new :c:func:`PyOS_FSPath` function returns the file system
   1902   representation of a :term:`path-like object`.
   1903   (Contributed by Brett Cannon in :issue:`27186`.)
   1904 
   1905 * The :c:func:`PyUnicode_FSConverter` and :c:func:`PyUnicode_FSDecoder`
   1906   functions will now accept :term:`path-like objects <path-like object>`.
   1907 
   1908 
   1909 Other Improvements
   1910 ==================
   1911 
   1912 * When :option:`--version` (short form: :option:`-V`) is supplied twice,
   1913   Python prints :data:`sys.version` for detailed information.
   1914 
   1915   .. code-block:: shell-session
   1916 
   1917     $ ./python -VV
   1918     Python 3.6.0b4+ (3.6:223967b49e49+, Nov 21 2016, 20:55:04)
   1919     [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]
   1920 
   1921 
   1922 Deprecated
   1923 ==========
   1924 
   1925 New Keywords
   1926 ------------
   1927 
   1928 ``async`` and ``await`` are not recommended to be used as variable, class,
   1929 function or module names.  Introduced by :pep:`492` in Python 3.5, they will
   1930 become proper keywords in Python 3.7.  Starting in Python 3.6, the use of
   1931 ``async`` or ``await`` as names will generate a :exc:`DeprecationWarning`.
   1932 
   1933 
   1934 Deprecated Python behavior
   1935 --------------------------
   1936 
   1937 Raising the :exc:`StopIteration` exception inside a generator will now
   1938 generate a :exc:`DeprecationWarning`, and will trigger a :exc:`RuntimeError`
   1939 in Python 3.7.  See :ref:`whatsnew-pep-479` for details.
   1940 
   1941 The :meth:`__aiter__` method is now expected to return an asynchronous
   1942 iterator directly instead of returning an awaitable as previously.
   1943 Doing the former will trigger a :exc:`DeprecationWarning`.  Backward
   1944 compatibility will be removed in Python 3.7.
   1945 (Contributed by Yury Selivanov in :issue:`27243`.)
   1946 
   1947 A backslash-character pair that is not a valid escape sequence now generates
   1948 a :exc:`DeprecationWarning`.  Although this will eventually become a
   1949 :exc:`SyntaxError`, that will not be for several Python releases.
   1950 (Contributed by Emanuel Barry in :issue:`27364`.)
   1951 
   1952 When performing a relative import, falling back on ``__name__`` and
   1953 ``__path__`` from the calling module when ``__spec__`` or
   1954 ``__package__`` are not defined now raises an :exc:`ImportWarning`.
   1955 (Contributed by Rose Ames in :issue:`25791`.)
   1956 
   1957 
   1958 Deprecated Python modules, functions and methods
   1959 ------------------------------------------------
   1960 
   1961 asynchat
   1962 ~~~~~~~~
   1963 
   1964 The :mod:`asynchat` has been deprecated in favor of :mod:`asyncio`.
   1965 (Contributed by Mariatta in :issue:`25002`.)
   1966 
   1967 
   1968 asyncore
   1969 ~~~~~~~~
   1970 
   1971 The :mod:`asyncore` has been deprecated in favor of :mod:`asyncio`.
   1972 (Contributed by Mariatta in :issue:`25002`.)
   1973 
   1974 
   1975 dbm
   1976 ~~~
   1977 
   1978 Unlike other :mod:`dbm` implementations, the :mod:`dbm.dumb` module
   1979 creates databases with the ``'rw'`` mode and allows modifying the database
   1980 opened with the ``'r'`` mode.  This behavior is now deprecated and will
   1981 be removed in 3.8.
   1982 (Contributed by Serhiy Storchaka in :issue:`21708`.)
   1983 
   1984 
   1985 distutils
   1986 ~~~~~~~~~
   1987 
   1988 The undocumented ``extra_path`` argument to the
   1989 :class:`~distutils.Distribution` constructor is now considered deprecated
   1990 and will raise a warning if set.   Support for this parameter will be
   1991 removed in a future Python release.  See :issue:`27919` for details.
   1992 
   1993 
   1994 grp
   1995 ~~~
   1996 
   1997 The support of non-integer arguments in :func:`~grp.getgrgid` has been
   1998 deprecated.
   1999 (Contributed by Serhiy Storchaka in :issue:`26129`.)
   2000 
   2001 
   2002 importlib
   2003 ~~~~~~~~~
   2004 
   2005 The :meth:`importlib.machinery.SourceFileLoader.load_module` and
   2006 :meth:`importlib.machinery.SourcelessFileLoader.load_module` methods
   2007 are now deprecated. They were the only remaining implementations of
   2008 :meth:`importlib.abc.Loader.load_module` in :mod:`importlib` that had not
   2009 been deprecated in previous versions of Python in favour of
   2010 :meth:`importlib.abc.Loader.exec_module`.
   2011 
   2012 The :class:`importlib.machinery.WindowsRegistryFinder` class is now
   2013 deprecated. As of 3.6.0, it is still added to :attr:`sys.meta_path` by
   2014 default (on Windows), but this may change in future releases.
   2015 
   2016 os
   2017 ~~
   2018 
   2019 Undocumented support of general :term:`bytes-like objects <bytes-like object>`
   2020 as paths in :mod:`os` functions, :func:`compile` and similar functions is
   2021 now deprecated.
   2022 (Contributed by Serhiy Storchaka in :issue:`25791` and :issue:`26754`.)
   2023 
   2024 re
   2025 ~~
   2026 
   2027 Support for inline flags ``(?letters)`` in the middle of the regular
   2028 expression has been deprecated and will be removed in a future Python
   2029 version.  Flags at the start of a regular expression are still allowed.
   2030 (Contributed by Serhiy Storchaka in :issue:`22493`.)
   2031 
   2032 ssl
   2033 ~~~
   2034 
   2035 OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
   2036 In the future the :mod:`ssl` module will require at least OpenSSL 1.0.2 or
   2037 1.1.0.
   2038 
   2039 SSL-related arguments like ``certfile``, ``keyfile`` and ``check_hostname``
   2040 in :mod:`ftplib`, :mod:`http.client`, :mod:`imaplib`, :mod:`poplib`,
   2041 and :mod:`smtplib` have been deprecated in favor of ``context``.
   2042 (Contributed by Christian Heimes in :issue:`28022`.)
   2043 
   2044 A couple of protocols and functions of the :mod:`ssl` module are now
   2045 deprecated. Some features will no longer be available in future versions
   2046 of OpenSSL. Other features are deprecated in favor of a different API.
   2047 (Contributed by Christian Heimes in :issue:`28022` and :issue:`26470`.)
   2048 
   2049 tkinter
   2050 ~~~~~~~
   2051 
   2052 The :mod:`tkinter.tix` module is now deprecated.  :mod:`tkinter` users
   2053 should use :mod:`tkinter.ttk` instead.
   2054 
   2055 venv
   2056 ~~~~
   2057 
   2058 The ``pyvenv`` script has been deprecated in favour of ``python3 -m venv``.
   2059 This prevents confusion as to what Python interpreter ``pyvenv`` is
   2060 connected to and thus what Python interpreter will be used by the virtual
   2061 environment.  (Contributed by Brett Cannon in :issue:`25154`.)
   2062 
   2063 
   2064 Deprecated functions and types of the C API
   2065 -------------------------------------------
   2066 
   2067 Undocumented functions :c:func:`PyUnicode_AsEncodedObject`,
   2068 :c:func:`PyUnicode_AsDecodedObject`, :c:func:`PyUnicode_AsEncodedUnicode`
   2069 and :c:func:`PyUnicode_AsDecodedUnicode` are deprecated now.
   2070 Use the :ref:`generic codec based API <codec-registry>` instead.
   2071 
   2072 
   2073 Deprecated Build Options
   2074 ------------------------
   2075 
   2076 The ``--with-system-ffi`` configure flag is now on by default on non-macOS
   2077 UNIX platforms.  It may be disabled by using ``--without-system-ffi``, but
   2078 using the flag is deprecated and will not be accepted in Python 3.7.
   2079 macOS is unaffected by this change.  Note that many OS distributors already
   2080 use the ``--with-system-ffi`` flag when building their system Python.
   2081 
   2082 
   2083 Removed
   2084 =======
   2085 
   2086 API and Feature Removals
   2087 ------------------------
   2088 
   2089 * Unknown escapes consisting of ``'\'`` and an ASCII letter in
   2090   regular expressions will now cause an error.  In replacement templates for
   2091   :func:`re.sub` they are still allowed, but deprecated.
   2092   The :const:`re.LOCALE` flag can now only be used with binary patterns.
   2093 
   2094 * ``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3).
   2095   :func:`inspect.getmodulename` should be used for obtaining the module
   2096   name for a given path.
   2097   (Contributed by Yury Selivanov in :issue:`13248`.)
   2098 
   2099 * ``traceback.Ignore`` class and ``traceback.usage``, ``traceback.modname``,
   2100   ``traceback.fullmodname``, ``traceback.find_lines_from_code``,
   2101   ``traceback.find_lines``, ``traceback.find_strings``,
   2102   ``traceback.find_executable_lines`` methods were removed from the
   2103   :mod:`traceback` module. They were undocumented methods deprecated since
   2104   Python 3.2 and equivalent functionality is available from private methods.
   2105 
   2106 * The ``tk_menuBar()`` and ``tk_bindForTraversal()`` dummy methods in
   2107   :mod:`tkinter` widget classes were removed (corresponding Tk commands
   2108   were obsolete since Tk 4.0).
   2109 
   2110 * The :meth:`~zipfile.ZipFile.open` method of the :class:`zipfile.ZipFile`
   2111   class no longer supports the ``'U'`` mode (was deprecated since Python 3.4).
   2112   Use :class:`io.TextIOWrapper` for reading compressed text files in
   2113   :term:`universal newlines` mode.
   2114 
   2115 * The undocumented ``IN``, ``CDROM``, ``DLFCN``, ``TYPES``, ``CDIO``, and
   2116   ``STROPTS`` modules have been removed.  They had been available in the
   2117   platform specific ``Lib/plat-*/`` directories, but were chronically out of
   2118   date, inconsistently available across platforms, and unmaintained.  The
   2119   script that created these modules is still available in the source
   2120   distribution at :source:`Tools/scripts/h2py.py`.
   2121 
   2122 * The deprecated ``asynchat.fifo`` class has been removed.
   2123 
   2124 
   2125 Porting to Python 3.6
   2126 =====================
   2127 
   2128 This section lists previously described changes and other bugfixes
   2129 that may require changes to your code.
   2130 
   2131 Changes in 'python' Command Behavior
   2132 ------------------------------------
   2133 
   2134 * The output of a special Python build with defined ``COUNT_ALLOCS``,
   2135   ``SHOW_ALLOC_COUNT`` or ``SHOW_TRACK_COUNT`` macros is now off by
   2136   default.  It can be re-enabled using the ``-X showalloccount`` option.
   2137   It now outputs to ``stderr`` instead of ``stdout``.
   2138   (Contributed by Serhiy Storchaka in :issue:`23034`.)
   2139 
   2140 
   2141 Changes in the Python API
   2142 -------------------------
   2143 
   2144 * :func:`open() <open>` will no longer allow combining the ``'U'`` mode flag
   2145   with ``'+'``.
   2146   (Contributed by Jeff Balogh and John O'Connor in :issue:`2091`.)
   2147 
   2148 * :mod:`sqlite3` no longer implicitly commits an open transaction before DDL
   2149   statements.
   2150 
   2151 * On Linux, :func:`os.urandom` now blocks until the system urandom entropy pool
   2152   is initialized to increase the security.
   2153 
   2154 * When :meth:`importlib.abc.Loader.exec_module` is defined,
   2155   :meth:`importlib.abc.Loader.create_module` must also be defined.
   2156 
   2157 * :c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg**
   2158   argument is not set. Previously only ``NULL`` was returned.
   2159 
   2160 * The format of the ``co_lnotab`` attribute of code objects changed to support
   2161   a negative line number delta. By default, Python does not emit bytecode with
   2162   a negative line number delta. Functions using ``frame.f_lineno``,
   2163   ``PyFrame_GetLineNumber()`` or ``PyCode_Addr2Line()`` are not affected.
   2164   Functions directly decoding ``co_lnotab`` should be updated to use a signed
   2165   8-bit integer type for the line number delta, but this is only required to
   2166   support applications using a negative line number delta. See
   2167   ``Objects/lnotab_notes.txt`` for the ``co_lnotab`` format and how to decode
   2168   it, and see the :pep:`511` for the rationale.
   2169 
   2170 * The functions in the :mod:`compileall` module now return booleans instead
   2171   of ``1`` or ``0`` to represent success or failure, respectively. Thanks to
   2172   booleans being a subclass of integers, this should only be an issue if you
   2173   were doing identity checks for ``1`` or ``0``. See :issue:`25768`.
   2174 
   2175 * Reading the :attr:`~urllib.parse.SplitResult.port` attribute of
   2176   :func:`urllib.parse.urlsplit` and :func:`~urllib.parse.urlparse` results
   2177   now raises :exc:`ValueError` for out-of-range values, rather than
   2178   returning :const:`None`.  See :issue:`20059`.
   2179 
   2180 * The :mod:`imp` module now raises a :exc:`DeprecationWarning` instead of
   2181   :exc:`PendingDeprecationWarning`.
   2182 
   2183 * The following modules have had missing APIs added to their :attr:`__all__`
   2184   attributes to match the documented APIs:
   2185   :mod:`calendar`, :mod:`cgi`, :mod:`csv`,
   2186   :mod:`~xml.etree.ElementTree`, :mod:`enum`,
   2187   :mod:`fileinput`, :mod:`ftplib`, :mod:`logging`, :mod:`mailbox`,
   2188   :mod:`mimetypes`, :mod:`optparse`, :mod:`plistlib`, :mod:`smtpd`,
   2189   :mod:`subprocess`, :mod:`tarfile`, :mod:`threading` and
   2190   :mod:`wave`.  This means they will export new symbols when ``import *``
   2191   is used.
   2192   (Contributed by Joel Taddei and Jacek Koodziej in :issue:`23883`.)
   2193 
   2194 * When performing a relative import, if ``__package__`` does not compare equal
   2195   to ``__spec__.parent`` then :exc:`ImportWarning` is raised.
   2196   (Contributed by Brett Cannon in :issue:`25791`.)
   2197 
   2198 * When a relative import is performed and no parent package is known, then
   2199   :exc:`ImportError` will be raised. Previously, :exc:`SystemError` could be
   2200   raised. (Contributed by Brett Cannon in :issue:`18018`.)
   2201 
   2202 * Servers based on the :mod:`socketserver` module, including those
   2203   defined in :mod:`http.server`, :mod:`xmlrpc.server` and
   2204   :mod:`wsgiref.simple_server`, now only catch exceptions derived
   2205   from :exc:`Exception`. Therefore if a request handler raises
   2206   an exception like :exc:`SystemExit` or :exc:`KeyboardInterrupt`,
   2207   :meth:`~socketserver.BaseServer.handle_error` is no longer called, and
   2208   the exception will stop a single-threaded server. (Contributed by
   2209   Martin Panter in :issue:`23430`.)
   2210 
   2211 * :func:`spwd.getspnam` now raises a :exc:`PermissionError` instead of
   2212   :exc:`KeyError` if the user doesn't have privileges.
   2213 
   2214 * The :meth:`socket.socket.close` method now raises an exception if
   2215   an error (e.g. ``EBADF``) was reported by the underlying system call.
   2216   (Contributed by Martin Panter in :issue:`26685`.)
   2217 
   2218 * The *decode_data* argument for the :class:`smtpd.SMTPChannel` and
   2219   :class:`smtpd.SMTPServer` constructors is now ``False`` by default.
   2220   This means that the argument passed to
   2221   :meth:`~smtpd.SMTPServer.process_message` is now a bytes object by
   2222   default, and ``process_message()`` will be passed keyword arguments.
   2223   Code that has already been updated in accordance with the deprecation
   2224   warning generated by 3.5 will not be affected.
   2225 
   2226 * All optional arguments of the :func:`~json.dump`, :func:`~json.dumps`,
   2227   :func:`~json.load` and :func:`~json.loads` functions and
   2228   :class:`~json.JSONEncoder` and :class:`~json.JSONDecoder` class
   2229   constructors in the :mod:`json` module are now :ref:`keyword-only
   2230   <keyword-only_parameter>`.
   2231   (Contributed by Serhiy Storchaka in :issue:`18726`.)
   2232 
   2233 * Subclasses of :class:`type` which don't override ``type.__new__`` may no
   2234   longer use the one-argument form to get the type of an object.
   2235 
   2236 * As part of :pep:`487`, the handling of keyword arguments passed to
   2237   :class:`type` (other than the metaclass hint, ``metaclass``) is now
   2238   consistently delegated to :meth:`object.__init_subclass__`. This means that
   2239   :meth:`type.__new__` and :meth:`type.__init__` both now accept arbitrary
   2240   keyword arguments, but :meth:`object.__init_subclass__` (which is called from
   2241   :meth:`type.__new__`) will reject them by default. Custom metaclasses
   2242   accepting additional keyword arguments will need to adjust their calls to
   2243   :meth:`type.__new__` (whether direct or via :class:`super`) accordingly.
   2244 
   2245 * In :class:`distutils.command.sdist.sdist`, the ``default_format``
   2246   attribute has been removed and is no longer honored. Instead, the
   2247   gzipped tarfile format is the default on all platforms and no
   2248   platform-specific selection is made.
   2249   In environments where distributions are
   2250   built on Windows and zip distributions are required, configure
   2251   the project with a ``setup.cfg`` file containing the following:
   2252 
   2253   .. code-block:: ini
   2254 
   2255     [sdist]
   2256     formats=zip
   2257 
   2258   This behavior has also been backported to earlier Python versions
   2259   by Setuptools 26.0.0.
   2260 
   2261 * In the :mod:`urllib.request` module and the
   2262   :meth:`http.client.HTTPConnection.request` method, if no Content-Length
   2263   header field has been specified and the request body is a file object,
   2264   it is now sent with HTTP 1.1 chunked encoding. If a file object has to
   2265   be sent to a HTTP 1.0 server, the Content-Length value now has to be
   2266   specified by the caller.
   2267   (Contributed by Demian Brecht and Rolf Krahl with tweaks from
   2268   Martin Panter in :issue:`12319`.)
   2269 
   2270 * The :class:`~csv.DictReader` now returns rows of type
   2271   :class:`~collections.OrderedDict`.
   2272   (Contributed by Steve Holden in :issue:`27842`.)
   2273 
   2274 * The :const:`crypt.METHOD_CRYPT` will no longer be added to ``crypt.methods``
   2275   if unsupported by the platform.
   2276   (Contributed by Victor Stinner in :issue:`25287`.)
   2277 
   2278 * The *verbose* and *rename* arguments for
   2279   :func:`~collections.namedtuple` are now keyword-only.
   2280   (Contributed by Raymond Hettinger in :issue:`25628`.)
   2281 
   2282 * On Linux, :func:`ctypes.util.find_library` now looks in
   2283   ``LD_LIBRARY_PATH`` for shared libraries.
   2284   (Contributed by Vinay Sajip in :issue:`9998`.)
   2285 
   2286 * The :class:`imaplib.IMAP4` class now handles flags containing the
   2287   ``']'`` character in messages sent from the server to improve
   2288   real-world compatibility.
   2289   (Contributed by Lita Cho in :issue:`21815`.)
   2290 
   2291 * The :func:`mmap.write() <mmap.write>` function now returns the number
   2292   of bytes written like other write methods.
   2293   (Contributed by Jakub Stasiak in :issue:`26335`.)
   2294 
   2295 * The :func:`pkgutil.iter_modules` and :func:`pkgutil.walk_packages`
   2296   functions now return :class:`~pkgutil.ModuleInfo` named tuples.
   2297   (Contributed by Ramchandra Apte in :issue:`17211`.)
   2298 
   2299 * :func:`re.sub` now raises an error for invalid numerical group
   2300   references in replacement templates even if the pattern is not
   2301   found in the string.  The error message for invalid group references
   2302   now includes the group index and the position of the reference.
   2303   (Contributed by SilentGhost, Serhiy Storchaka in :issue:`25953`.)
   2304 
   2305 * :class:`zipfile.ZipFile` will now raise :exc:`NotImplementedError` for
   2306   unrecognized compression values.  Previously a plain :exc:`RuntimeError`
   2307   was raised.  Additionally, calling :class:`~zipfile.ZipFile` methods
   2308   on a closed ZipFile or calling the :meth:`~zipfile.ZipFile.write` method
   2309   on a ZipFile created with mode ``'r'`` will raise a :exc:`ValueError`.
   2310   Previously, a :exc:`RuntimeError` was raised in those scenarios.
   2311 
   2312 * when custom metaclasses are combined with zero-argument :func:`super` or
   2313   direct references from methods to the implicit ``__class__`` closure
   2314   variable, the implicit ``__classcell__`` namespace entry must now be passed
   2315   up to ``type.__new__`` for initialisation. Failing to do so will result in
   2316   a :exc:`DeprecationWarning` in Python 3.6 and a :exc:`RuntimeError` in
   2317   Python 3.8.
   2318 
   2319 * With the introduction of :exc:`ModuleNotFoundError`, import system consumers
   2320   may start expecting import system replacements to raise that more specific
   2321   exception when appropriate, rather than the less-specific :exc:`ImportError`.
   2322   To provide future compatibility with such consumers, implementors of
   2323   alternative import systems that completely replace :func:`__import__` will
   2324   need to update their implementations to raise the new subclass when a module
   2325   can't be found at all. Implementors of compliant plugins to the default
   2326   import system shouldn't need to make any changes, as the default import
   2327   system will raise the new subclass when appropriate.
   2328 
   2329 
   2330 Changes in the C API
   2331 --------------------
   2332 
   2333 * The :c:func:`PyMem_Malloc` allocator family now uses the :ref:`pymalloc allocator
   2334   <pymalloc>` rather than the system :c:func:`malloc`. Applications calling
   2335   :c:func:`PyMem_Malloc` without holding the GIL can now crash. Set the
   2336   :envvar:`PYTHONMALLOC` environment variable to ``debug`` to validate the
   2337   usage of memory allocators in your application. See :issue:`26249`.
   2338 
   2339 * :c:func:`Py_Exit` (and the main interpreter) now override the exit status
   2340   with 120 if flushing buffered data failed.  See :issue:`5319`.
   2341 
   2342 
   2343 CPython bytecode changes
   2344 ------------------------
   2345 
   2346 There have been several major changes to the :term:`bytecode` in Python 3.6.
   2347 
   2348 * The Python interpreter now uses a 16-bit wordcode instead of bytecode.
   2349   (Contributed by Demur Rumed with input and reviews from
   2350   Serhiy Storchaka and Victor Stinner in :issue:`26647` and :issue:`28050`.)
   2351 
   2352 * The new :opcode:`FORMAT_VALUE` and :opcode:`BUILD_STRING` opcodes as part
   2353   of the  :ref:`formatted string literal <whatsnew36-pep498>` implementation.
   2354   (Contributed by Eric Smith in :issue:`25483` and
   2355   Serhiy Storchaka in :issue:`27078`.)
   2356 
   2357 * The new :opcode:`BUILD_CONST_KEY_MAP` opcode to optimize the creation
   2358   of dictionaries with constant keys.
   2359   (Contributed by Serhiy Storchaka in :issue:`27140`.)
   2360 
   2361 * The function call opcodes have been heavily reworked for better performance
   2362   and simpler implementation.
   2363   The :opcode:`MAKE_FUNCTION`, :opcode:`CALL_FUNCTION`,
   2364   :opcode:`CALL_FUNCTION_KW` and :opcode:`BUILD_MAP_UNPACK_WITH_CALL` opcodes
   2365   have been modified, the new :opcode:`CALL_FUNCTION_EX` and
   2366   :opcode:`BUILD_TUPLE_UNPACK_WITH_CALL` have been added, and
   2367   ``CALL_FUNCTION_VAR``, ``CALL_FUNCTION_VAR_KW`` and ``MAKE_CLOSURE`` opcodes
   2368   have been removed.
   2369   (Contributed by Demur Rumed in :issue:`27095`, and Serhiy Storchaka in
   2370   :issue:`27213`, :issue:`28257`.)
   2371 
   2372 * The new :opcode:`SETUP_ANNOTATIONS` and :opcode:`STORE_ANNOTATION` opcodes
   2373   have been added to support the new :term:`variable annotation` syntax.
   2374   (Contributed by Ivan Levkivskyi in :issue:`27985`.)
   2375 
   2376 
   2377 Notable changes in Python 3.6.2
   2378 ===============================
   2379 
   2380 New ``make regen-all`` build target
   2381 -----------------------------------
   2382 
   2383 To simplify cross-compilation, and to ensure that CPython can reliably be
   2384 compiled without requiring an existing version of Python to already be
   2385 available, the autotools-based build system no longer attempts to implicitly
   2386 recompile generated files based on file modification times.
   2387 
   2388 Instead, a new ``make regen-all`` command has been added to force regeneration
   2389 of these files when desired (e.g. after an initial version of Python has
   2390 already been built based on the pregenerated versions).
   2391 
   2392 More selective regeneration targets are also defined - see
   2393 :source:`Makefile.pre.in` for details.
   2394 
   2395 (Contributed by Victor Stinner in :issue:`23404`.)
   2396 
   2397 .. versionadded:: 3.6.2
   2398 
   2399 
   2400 Removal of ``make touch`` build target
   2401 --------------------------------------
   2402 
   2403 The ``make touch`` build target previously used to request implicit regeneration
   2404 of generated files by updating their modification times has been removed.
   2405 
   2406 It has been replaced by the new ``make regen-all`` target.
   2407 
   2408 (Contributed by Victor Stinner in :issue:`23404`.)
   2409 
   2410 .. versionchanged:: 3.6.2
   2411 
   2412 
   2413 Notable changes in Python 3.6.4
   2414 ===============================
   2415 
   2416 The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
   2417 has been removed as its members being never cleared may cause a segfault
   2418 during finalization of the interpreter.
   2419 (Contributed by Xavier de Gaye in :issue:`22898` and :issue:`30697`.)
   2420 
   2421 
   2422 Notable changes in Python 3.6.5
   2423 ===============================
   2424 
   2425 The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``
   2426 locale to the ``LC_NUMERIC`` locale in some cases.
   2427 (Contributed by Victor Stinner in :issue:`31900`.)
   2428 
   2429 Notable changes in Python 3.6.7
   2430 ===============================
   2431 
   2432 In 3.6.7 the :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token
   2433 when provided with input that does not have a trailing new line.  This behavior
   2434 now matches what the C tokenizer does internally.
   2435 (Contributed by Ammar Askar in :issue:`33899`.)
   2436