# 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 | Additional unpacking generalizations | Partial
PEP 465 | A new matrix multiplication operator | Complete
PEP 492 | Coroutines with `async` and `await` syntax | Complete
Extensions and changes to runtime
PEP 461 | % formatting for binary strings | Complete
PEP 475 | Retrying system calls that fail with `EINTR` | Complete
PEP 479 | Change `StopIteration` handling inside generators | Complete
Standard library changes
PEP 471 | `os.scandir()` |
PEP 485 | `math.isclose()`, a function for testing approximate equality | Complete
Miscellaneous changes
PEP 441 | Improved Python zip application support |
PEP 486 | Make the Python Launcher aware of virtual environments | Not relevant
PEP 484 | Type hints (advisory only) | Complete [1]
PEP 488 | Elimination of PYO files | Not relevant
PEP 489 | 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

- zipzap

Changes to built-in modules:

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
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
A new BufferedIOBase.readinto1() method, that uses at most one call to the underlying raw stream’s RawIOBase.read() or RawIOBase.readinto() methods |
json |
JSON decoder now raises JSONDecodeError instead of ValueError to provide better context information about the error. |
math
Two new constants have been added to the math module: inf and nan. | Complete
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
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 |
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
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. | Complete
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
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
The monotonic() function is now always available |

Notes

[1]

The MicroPython parser correct ignores all type hints. However, the `typing` module is not built-in.

Language and External Links

Language
  English
  中文

External links
  openmv.io
  forums.openmv.io
  github.com/openmv/openmv
  micropython.org
  forum.micropython.org
  github.com/micropython/micropython