.. _python_35:

Python 3.5
==========

Below is a list of finalised/accepted PEPs for Python 3.5 grouped into their impact to MicroPython.

   +----------------------------------------------------------------------------------------------------------+---------------+
   | **Extensions to the syntax:**                                                                            | **Status**    |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 448 <https://www.python.org/dev/peps/pep-0448/>`_ | additional unpacking generalizations            |               |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 465 <https://www.python.org/dev/peps/pep-0465/>`_ | a new matrix multiplication operator            | Completed     |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 492 <https://www.python.org/dev/peps/pep-0492/>`_ | coroutines with async and await syntax          | Completed     |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | **Extensions and changes to runtime:**                                                                                   |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 461 <https://www.python.org/dev/peps/pep-0461/>`_ | % formatting for binary strings                 | Completed     |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 475 <https://www.python.org/dev/peps/pep-0475/>`_ | retrying system calls that fail with EINTR      | Completed     |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 479 <https://www.python.org/dev/peps/pep-0479/>`_ | change StopIteration handling inside generators | Completed     |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | **Standard library changes:**                                                                                            |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 471 <https://www.python.org/dev/peps/pep-0471/>`_ | os.scandir()                                    |               |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 485 <https://www.python.org/dev/peps/pep-0485/>`_ | math.isclose(), a function for testing          | Completed     |
   |                                                        | approximate equality                            |               |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | **Miscellaneous changes:**                                                                                               |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 441 <https://www.python.org/dev/peps/pep-0441/>`_ | improved Python zip application support         |               |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 486 <https://www.python.org/dev/peps/pep-0486/>`_ | make the Python Launcher aware of virtual       | Not relevant  |
   |                                                        | environments                                    |               |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 484 <https://www.python.org/dev/peps/pep-0484/>`_ | type hints (advisory only)                      | In Progress   |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 488 <https://www.python.org/dev/peps/pep-0488/>`_ | elimination of PYO files                        | Not relevant  |
   +--------------------------------------------------------+-------------------------------------------------+---------------+
   | `PEP 489 <https://www.python.org/dev/peps/pep-0489/>`_ | redesigning extension module loading            |               |
   +--------------------------------------------------------+-------------------------------------------------+---------------+


Other Language Changes:

   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Added the *namereplace* error handlers. The *backslashreplace* error handlers now work with decoding and  |               |
   | translating.                                                                                              |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Property docstrings are now writable. This is especially useful for collections.namedtuple() docstrings   |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Circular imports involving relative imports are now supported.                                            |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+


New Modules:

* `typing <https://docs.python.org/3/whatsnew/3.5.html#typing>`_

* `zipzap <https://docs.python.org/3/whatsnew/3.5.html#zipapp>`_


Changes to built-in modules:

   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `collections <https://docs.python.org/3/whatsnew/3.5.html#collections>`_                                                  |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *OrderedDict* class is now implemented in C, which makes it 4 to 100 times faster.                    |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | *OrderedDict.items()* , *OrderedDict.keys()* , *OrderedDict.values()* views now support reversed()        |               |
   | iteration.                                                                                                |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The deque class now defines *index()*, *insert()*, and *copy()*, and supports the + and * operators.      |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Docstrings produced by namedtuple() can now be updated.                                                   |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The UserString class now implements the *__getnewargs__()*, *__rmod__()*, *casefold()*, *format_map()*,   |               |
   | *isprintable()*, and *maketrans()* methods to match the corresponding methods of str.                     |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `heapq <https://docs.python.org/3/whatsnew/3.5.html#heapq>`_                                                              |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Element comparison in *merge()* can now be customized by passing a key function in a new optional key     |               |
   | keyword argument, and a new optional *reverse* keyword argument can be used to reverse element comparison |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `io <https://docs.python.org/3/whatsnew/3.5.html#io>`_                                                                    |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | A new *BufferedIOBase.readinto1()* method, that uses at most one call to the underlying raw stream's      |               |
   | *RawIOBase.read()* or *RawIOBase.readinto()* methods                                                      |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `json <https://docs.python.org/3/whatsnew/3.5.html#json>`_                                                |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | JSON decoder now raises JSONDecodeError instead of ValueError to provide better context information about |               |
   | the error.                                                                                                |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `math <https://docs.python.org/3/whatsnew/3.5.html#math>`_                                                                |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Two new constants have been added to the math module: *inf* and *nan*.                                    | Completed     |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | A new function *isclose()* provides a way to test for approximate equality.                               |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | A new *gcd()* function has been added. The *fractions.gcd()* function is now deprecated.                  |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `os <https://docs.python.org/3/whatsnew/3.5.html#os>`_                                                                    |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The new *scandir()* function returning an iterator of DirEntry objects has been added.                    |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *urandom()* function now uses the *getrandom()* syscall on Linux 3.17 or newer, and *getentropy()* on |               |
   | OpenBSD 5.6 and newer, removing the need to use /dev/urandom and avoiding failures due to potential file  |               |
   | descriptor exhaustion.                                                                                    |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | New *get_blocking()* and *set_blocking()* functions allow getting and setting a file descriptor's blocking|               |
   | mode (O_NONBLOCK.)                                                                                        |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | There is a new *os.path.commonpath()* function returning the longest common sub-path of each passed       |               |
   | pathname                                                                                                  |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `re <https://docs.python.org/3/whatsnew/3.5.html#re>`_                                                    |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | References and conditional references to groups with fixed length are now allowed in lookbehind assertions|               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The number of capturing groups in regular expressions is no longer limited to 100.                        |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *sub()* and *subn()* functions now replace unmatched groups with empty strings instead of raising an  |               |
   | exception.                                                                                                |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *re.error* exceptions have new attributes, msg, pattern, pos, lineno, and colno, that provide better  |               |
   | context information about the error                                                                       |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `socket <https://docs.python.org/3/whatsnew/3.5.html#socket>`_                                                            |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Functions with timeouts now use a monotonic clock, instead of a system clock.                             |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | A new *socket.sendfile()* method allows sending a file over a socket by using the high-performance        |               |
   | *os.sendfile()* function on UNIX, resulting in uploads being from 2 to 3 times faster than when using     |               |
   | plain *socket.send()*                                                                                     |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *socket.sendall()* method no longer resets the socket timeout every time bytes are received or sent.  |               |
   | The socket timeout is now the maximum total duration to send all data.                                    |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The backlog argument of the *socket.listen()* method is now optional. By default it is set to SOMAXCONN or|               |
   | to 128, whichever is less.                                                                                |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `ssl <https://docs.python.org/3/whatsnew/3.5.html#ssl>`_                                                                  |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Memory BIO Support                                                                                        |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | Application-Layer Protocol Negotiation Support                                                            |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | There is a new *SSLSocket.version()* method to query the actual protocol version in use.                  |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The SSLSocket class now implements a *SSLSocket.sendfile()* method.                                       |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *SSLSocket.send()* method now raises either the *ssl.SSLWantReadError* or *ssl.SSLWantWriteError*     |               |
   | exception on a non-blocking socket if the operation would block. Previously, it would return 0.           |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *cert_time_to_seconds()* function now interprets the input time as UTC and not as local time, per RFC |               |
   | 5280. Additionally, the return value is always an int.                                                    |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | New *SSLObject.shared_ciphers()* and *SSLSocket.shared_ciphers()* methods return the list of ciphers sent |               |
   | by the client during the handshake.                                                                       |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *SSLSocket.do_handshake()*, *SSLSocket.read()*, *SSLSocket.shutdown()*, and *SSLSocket.write()*       |               |
   | methods of the SSLSocket class no longer reset the socket timeout every time bytes are received or sent.  |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *match_hostname()* function now supports matching of IP addresses.                                    |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `sys <https://docs.python.org/3/whatsnew/3.5.html#sys>`_                                                                  |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | A new *set_coroutine_wrapper()* function allows setting a global hook that will be called whenever a      |               |
   | coroutine object is created by an async def function. A corresponding *get_coroutine_wrapper()* can be    |               |
   | used to obtain a currently set wrapper.                                                                   |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | A new *is_finalizing()* function can be used to check if the Python interpreter is shutting down.         |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | `time <https://docs.python.org/3/whatsnew/3.5.html#time>`_                                                                |
   +-----------------------------------------------------------------------------------------------------------+---------------+
   | The *monotonic()* function is now always available                                                        |               |
   +-----------------------------------------------------------------------------------------------------------+---------------+