.. _python_37:

Python 3.7
==========

New Features:

.. table::
  :widths: 20 60 20

  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | **Feature**                                                                                               | **Status**                           |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 538 <https://www.python.org/dev/peps/pep-0538/>`_ | Coercing the legacy C locale to a UTF-8 based    |                                      |
  |                                                        | locale                                           |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 539 <https://www.python.org/dev/peps/pep-0539/>`_ | A New C-API for Thread-Local Storage in CPython  |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 540 <https://www.python.org/dev/peps/pep-0540/>`_ | UTF-8 mode                                       |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 552 <https://www.python.org/dev/peps/pep-0552/>`_ | Deterministic pyc                                |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 553 <https://www.python.org/dev/peps/pep-0553/>`_ | Built-in ``breakpoint()``                        |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 557 <https://www.python.org/dev/peps/pep-0557/>`_ | Data Classes                                     |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 560 <https://www.python.org/dev/peps/pep-0560/>`_ | Core support for typing module and generic types |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 562 <https://www.python.org/dev/peps/pep-0562/>`_ | Module ``__getattr__`` and ``__dir__``           | Partial                              |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 563 <https://www.python.org/dev/peps/pep-0563/>`_ | Postponed Evaluation of Annotations              |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 564 <https://www.python.org/dev/peps/pep-0564/>`_ | Time functions with nanosecond resolution        | Partial [#ftimenanosec]_             |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 565 <https://www.python.org/dev/peps/pep-0565/>`_ | Show DeprecationWarning in ``__main__``          |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+
  | `PEP 567 <https://www.python.org/dev/peps/pep-0567/>`_ | Context Variables                                |                                      |
  +--------------------------------------------------------+--------------------------------------------------+--------------------------------------+

Other Language Changes:

.. table::
  :widths: 90 10

  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | ``async`` and ``await`` are now reserved keywords                                                               | Complete       |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | ``dict`` objects must preserve insertion-order                                                                  |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | More than 255 arguments can now be passed to a function; a function can now have more than 255 parameters       |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | ``bytes.fromhex()`` and ``bytearray.fromhex()`` now ignore all ASCII whitespace, not only spaces                |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | ``str``, ``bytes``, and ``bytearray`` gained support for the new ``isascii()`` method, which can be used to     |                |
  | test if a string or bytes contain only the ASCII characters                                                     |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | ``ImportError`` now displays module name and module ``__file__`` path when ``from ... import ...`` fails        |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | Circular imports involving absolute imports with binding a submodule to a name are now supported                |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | ``object.__format__(x, '')`` is now equivalent to ``str(x)`` rather than ``format(str(self), '')``              |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | In order to better support dynamic creation of stack traces, ``types.TracebackType`` can now be                 |                |
  | instantiated from Python code, and the ``tb_next`` attribute on tracebacks is now writable                      |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | When using the ``-m`` switch, ``sys.path[0]`` is now eagerly expanded to the full starting directory path,      |                |
  | rather than being left as the empty directory (which allows imports from the current working directory          |                |
  | at the time when an import occurs)                                                                              |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+
  | The new ``-X importtime`` option or the ``PYTHONPROFILEIMPORTTIME`` environment variable can be used to         |                |
  | show the timing of each module import                                                                           |                |
  +-----------------------------------------------------------------------------------------------------------------+----------------+

Changes to built-in modules:

.. table::
  :widths: 90 10

  +------------------------------------------------------------------------------------------------------------+----------------+
  | `asyncio <https://docs.python.org/3/whatsnew/3.7.html#asyncio>`_                                           |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | Too many to list                                                                                           |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | `gc <https://docs.python.org/3/whatsnew/3.7.html#gc>`_                                                     |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | New features include *gc.freeze()*, *gc.unfreeze()*, *gc-get_freeze_count*                                 |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | `math <https://docs.python.org/3/whatsnew/3.7.html#math>`_                                                 |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | math.remainder() added to implement IEEE 754-style remainder                                               |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | `re <https://docs.python.org/3/whatsnew/3.7.html#re>`_                                                     |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | A number of tidy up features including better support for splitting on empty strings and copy support for  |                |
  | compiled expressions and match objects                                                                     |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | `sys <https://docs.python.org/3/whatsnew/3.7.html#sys>`_                                                   |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | sys.breakpointhook() added. sys.get(/set)_coroutine_origin_tracking_depth() added                          |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | `time <https://docs.python.org/3/whatsnew/3.7.html#time>`_                                                 |                |
  +------------------------------------------------------------------------------------------------------------+----------------+
  | Mostly updates to support nanosecond resolution in PEP564, see above                                       |                |
  +------------------------------------------------------------------------------------------------------------+----------------+

.. rubric:: Notes

.. [#ftimenanosec] Only :func:`time.time_ns` is implemented.