docs/differences/python_36.rst
.. _python_36:
Python 3.6 beta 1 was released on 12 Sep 2016, and a summary of the new features can be found here:
.. table:: :widths: 30 50 20
+-----------------------------------------------------------------------------------------------------------+-----------------+
| New Syntax Features | Status |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 498 <https://www.python.org/dev/peps/pep-0498/>_ | Literal String Formatting | Complete |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 515 <https://www.python.org/dev/peps/pep-0515/>_ | Underscores in Numeric Literals | Complete |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 525 <https://www.python.org/dev/peps/pep-0525/>_ | Asynchronous Generators | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 526 <https://www.python.org/dev/peps/pep-0526/>_ | Syntax for Variable Annotations (provisional) | Complete |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 530 <https://www.python.org/dev/peps/pep-0530/>_ | Asynchronous Comprehensions | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| New Built-in Features |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 468 <https://www.python.org/dev/peps/pep-0468/>_ | Preserving the order of kwargs in a function | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 487 <https://www.python.org/dev/peps/pep-0487/>_ | Simpler customization of class creation | Partial |
| | | [#setname]_ |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 520 <https://www.python.org/dev/peps/pep-0520/>_ | Preserving Class Attribute Definition Order | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| Standard Library Changes |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 495 <https://www.python.org/dev/peps/pep-0495/>_ | Local Time Disambiguation | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 506 <https://www.python.org/dev/peps/pep-0506/>_ | Adding A Secrets Module To The Standard Library | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 519 <https://www.python.org/dev/peps/pep-0519/>_ | Adding a file system path protocol | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| CPython Internals |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 509 <https://www.python.org/dev/peps/pep-0509/>_ | Add a private version to dict | Won't do |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 523 <https://www.python.org/dev/peps/pep-0523/>_ | Adding a frame evaluation API to CPython | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| Linux/Window Changes |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 524 <https://www.python.org/dev/peps/pep-0524/>_ | Make os.urandom() blocking on Linux | |
| | (during system startup) | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 528 <https://www.python.org/dev/peps/pep-0528/>_ | Change Windows console encoding to UTF-8 | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
| PEP 529 <https://www.python.org/dev/peps/pep-0529/>_ | Change Windows filesystem encoding to UTF-8 | |
+--------------------------------------------------------+--------------------------------------------------+-----------------+
Other Language Changes:
.. table:: :widths: 90 10
+-------------------------------------------------------------------------------------------------------------+---------------+ | 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:
.. table:: :widths: 90 10
+--------------------------------------------------------------------------------------------------------------+----------------+
| array <https://docs.python.org/3.6/whatsnew/3.6.html#array>_ | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| Exhausted iterators of array.array will now stay exhausted even if the iterated array is extended. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| binascii <https://docs.python.org/3.6/whatsnew/3.6.html#binascii>_ | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| The b2a_base64() function now accepts an optional newline keyword argument to control whether the newline | Complete |
| character is appended to the return value | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| cmath <https://docs.python.org/3.6/whatsnew/3.6.html#cmath>_ | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| 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 | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| collections <https://docs.python.org/3.6/whatsnew/3.6.html#collections>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| 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. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| hashlib <https://docs.python.org/3.6/whatsnew/3.6.html#hashlib>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| 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 <https://docs.python.org/3.6/whatsnew/3.6.html#json>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| json.load() and json.loads() now support binary input. Encoded JSON should be represented using either | |
| UTF-8, UTF-16, or UTF-32. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| math <https://docs.python.org/3.6/whatsnew/3.6.html#math>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| The new math.tau (τ) constant has been added | Complete |
+--------------------------------------------------------------------------------------------------------------+----------------+
| os <https://docs.python.org/3.6/whatsnew/3.6.html#os>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| 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. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| re <https://docs.python.org/3.6/whatsnew/3.6.html#re>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| 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. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| socket <https://docs.python.org/3.6/whatsnew/3.6.html#socket>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| 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 <https://docs.python.org/3.6/whatsnew/3.6.html#ssl>_ |
+--------------------------------------------------------------------------------------------------------------+----------------+
| 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. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| struct <https://docs.python.org/3.6/whatsnew/3.6.html#struct>_ | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| now supports IEEE 754 half-precision floats via the 'e' format specifier. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| sys <https://docs.python.org/3.6/whatsnew/3.6.html#sys>_ | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| The new getfilesystemencodeerrors() function returns the name of the error mode used to convert between | |
| Unicode filenames and bytes filenames. | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| zlib <https://docs.python.org/3.6/whatsnew/3.6.html#zlib>_ | |
+--------------------------------------------------------------------------------------------------------------+----------------+
| The compress() and decompress() functions now accept keyword arguments | |
+--------------------------------------------------------------------------------------------------------------+----------------+
.. rubric:: Notes
.. [#setname] Currently, only :func:__set_name__ is implemented.