Python 3.6¶
Python 3.6 beta 1 was released on 12 Sep 2016, and a summary of the new features can be found here:
New Syntax Features  | 
Status  | 
|
Literal String Formatting  | 
Complete  | 
|
Underscores in Numeric Literals  | 
Complete  | 
|
Asynchronous Generators  | 
||
Syntax for Variable Annotations (provisional)  | 
Complete  | 
|
Asynchronous Comprehensions  | 
||
New Built-in Features  | 
||
Preserving the order of kwargs in a function  | 
||
Simpler customization of class creation  | 
||
Preserving Class Attribute Definition Order  | 
||
Standard Library Changes  | 
||
Local Time Disambiguation  | 
||
Adding A Secrets Module To The Standard Library  | 
||
Adding a file system path protocol  | 
||
CPython Internals  | 
||
Add a private version to dict  | 
Won’t do  | 
|
Adding a frame evaluation API to CPython  | 
||
Linux/Window Changes  | 
||
Make   | 
||
Change Windows console encoding to UTF-8  | 
||
Change Windows filesystem encoding to UTF-8  | 
||
Other Language Changes:
A global or nonlocal statement must now textually appear before the first use of the affected name in the same scope. Previously this was a SyntaxWarning.  | 
|
It is now possible to set a special method to None to indicate that the corresponding operation is not available. For example, if a class sets __iter__() to None , the class is not iterable.  | 
|
Long sequences of repeated traceback lines are now abbreviated as [Previous line repeated {count} more times]  | 
|
Import now raises the new exception ModuleNotFoundError when it cannot find a module. Code that currently checks for ImportError (in try-except) will still work.  | 
|
Class methods relying on zero-argument super() will now work correctly when called from metaclass methods during class creation.  | 
Changes to built-in modules:
Exhausted iterators of array.array will now stay exhausted even if the iterated array is extended.  | 
|
The b2a_base64() function now accepts an optional newline keyword argument to control whether the newline character is appended to the return value  | 
Complete  | 
The new cmath.tau (τ) constant has been added  | 
|
New constants: cmath.inf and cmath.nan to match math.inf and math.nan , and also cmath.infj and cmath.nanj to match the format used by complex repr  | 
|
The new Collection abstract base class has been added to represent sized iterable container classes  | 
|
The new Reversible abstract base class represents iterable classes that also provide the __reversed__() method.  | 
|
The new AsyncGenerator abstract base class represents asynchronous generators.  | 
|
The namedtuple() function now accepts an optional keyword argument module, which, when specified, is used for the __module__ attribute of the returned named tuple class.  | 
|
The verbose and rename arguments for namedtuple() are now keyword-only.  | 
|
Recursive collections.deque instances can now be pickled.  | 
|
BLAKE2 hash functions were added to the module. blake2b() and blake2s() are always available and support the full feature set of BLAKE2.  | 
|
The SHA-3 hash functions sha3_224(), sha3_256(), sha3_384(), sha3_512(), and SHAKE hash functions shake_128() and shake_256() were added.  | 
|
The password-based key derivation function scrypt() is now available with OpenSSL 1.1.0 and newer.  | 
|
json.load() and json.loads() now support binary input. Encoded JSON should be represented using either UTF-8, UTF-16, or UTF-32.  | 
|
The new math.tau (τ) constant has been added  | 
Complete  | 
A new close() method allows explicitly closing a scandir() iterator. The scandir() iterator now supports the context manager protocol.  | 
|
On Linux, os.urandom() now blocks until the system urandom entropy pool is initialized to increase the security.  | 
|
The Linux getrandom() syscall (get random bytes) is now exposed as the new os.getrandom() function.  | 
|
Added support of modifier spans in regular expressions. Examples: ‘(?i:p)ython’ matches ‘python’ and ‘Python’, but not ‘PYTHON’; ‘(?i)g(?-i:v)r’ matches ‘GvR’ and ‘gvr’, but not ‘GVR’.  | 
|
Match object groups can be accessed by __getitem__, which is equivalent to group(). So mo[‘name’] is now equivalent to mo.group(‘name’).  | 
|
Match objects now support index-like objects as group indices.  | 
|
The ioctl() function now supports the SIO_LOOPBACK_FAST_PATH control code.  | 
|
The getsockopt() constants SO_DOMAIN , SO_PROTOCOL, SO_PEERSEC , and SO_PASSSEC are now supported.  | 
|
The setsockopt() now supports the setsockopt(level, optname, None, optlen: int) form.  | 
|
The socket module now supports the address family AF_ALG to interface with Linux Kernel crypto API. ALG_, SOL_ALG and sendmsg_afalg() were added.  | 
|
New Linux constants TCP_USER_TIMEOUT and TCP_CONGESTION were added.  | 
|
ssl supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2.  | 
|
3DES has been removed from the default cipher suites and ChaCha20 Poly1305 cipher suites have been added.  | 
|
SSLContext has better default configuration for options and ciphers.  | 
|
SSL session can be copied from one client-side connection to another with the new SSLSession class. TLS session resumption can speed up the initial handshake, reduce latency and improve performance.  | 
|
The new get_ciphers() method can be used to get a list of enabled ciphers in order of cipher priority.  | 
|
All constants and flags have been converted to IntEnum and IntFlags.  | 
|
Server and client-side specific TLS protocols for SSLContext were added.  | 
|
Added SSLContext.post_handshake_auth to enable and ssl.SSLSocket.verify_client_post_handshake() to initiate TLS 1.3 post-handshake authentication.  | 
|
now supports IEEE 754 half-precision floats via the ‘e’ format specifier.  | 
|
The new getfilesystemencodeerrors() function returns the name of the error mode used to convert between Unicode filenames and bytes filenames.  | 
|
The compress() and decompress() functions now accept keyword arguments  | 
|