Python 3.6

Python 3.6 beta 1 a été publié le 12 septembre 2016, et un résumé des nouvelles fonctionnalités est disponible ici :

Nouvelles fonctionnalités de syntaxe

État

PEP 498

Formatage littéral des chaînes de caractères

Terminé

PEP 515

Traits de soulignement dans les littéraux numériques

Terminé

PEP 525

Générateurs asynchrones

PEP 526

Syntaxe pour les annotations de variables (provisoire)

Terminé

PEP 530

Compréhensions asynchrones

Nouvelles fonctionnalités intégrées

PEP 468

Préservation de l’ordre des kwargs dans une fonction

PEP 487

Personnalisation simplifiée de la création de classes

Partiel [1]

PEP 520

Préservation de l’ordre de définition des attributs de classe

Modifications de la bibliothèque standard

PEP 495

Désambiguïsation de l’heure locale

PEP 506

Ajout d’un module secrets à la bibliothèque standard

PEP 519

Ajout d’un protocole de chemin de système de fichiers

Composants internes de CPython

PEP 509

Ajout d’une version privée aux dictionnaires

Ne sera pas fait

PEP 523

Ajout d’une API d’évaluation de trame à CPython

Modifications Linux/Windows

PEP 524

Rendre os.urandom() bloquant sous Linux (pendant le démarrage du système)

PEP 528

Passage de l’encodage de la console Windows en UTF-8

PEP 529

Passage de l’encodage du système de fichiers Windows en UTF-8

Autres modifications du langage :

Une instruction global ou nonlocal doit maintenant apparaître textuellement avant la première utilisation du nom concerné dans la même portée. Auparavant, il s’agissait d’un SyntaxWarning.

Il est désormais possible de définir une méthode spéciale à None pour indiquer que l’opération correspondante n’est pas disponible. Par exemple, si une classe définit __iter__() à None, la classe n’est pas itérable.

Les longues séquences de lignes de traceback répétées sont désormais abrégées sous la forme [Previous line repeated {count} more times]

L’importation lève maintenant la nouvelle exception ModuleNotFoundError lorsqu’elle ne parvient pas à trouver un module. Le code qui vérifie actuellement ImportError (dans un try-except) continuera de fonctionner.

Les méthodes de classe reposant sur un super() sans argument fonctionneront désormais correctement lorsqu’elles sont appelées depuis des méthodes de métaclasse pendant la création de la classe.

Modifications des modules intégrés :

array

Les itérateurs épuisés d’un array.array resteront désormais épuisés même si le tableau itéré est étendu.

binascii

La fonction b2a_base64() accepte désormais un argument nommé optionnel newline permettant de contrôler si le caractère de saut de ligne est ajouté à la valeur de retour

Terminé

cmath

La nouvelle constante cmath.tau (τ) a été ajoutée

Nouvelles constantes : cmath.inf et cmath.nan pour correspondre à math.inf et math.nan, ainsi que cmath.infj et cmath.nanj pour correspondre au format utilisé par le repr des nombres complexes

collections

La nouvelle classe de base abstraite Collection a été ajoutée pour représenter les classes de conteneurs itérables ayant une taille

La nouvelle classe de base abstraite Reversible représente les classes itérables qui fournissent également la méthode __reversed__().

La nouvelle classe de base abstraite AsyncGenerator représente les générateurs asynchrones.

La fonction namedtuple() accepte désormais un argument nommé optionnel module qui, lorsqu’il est spécifié, est utilisé pour l’attribut __module__ de la classe de tuple nommé renvoyée.

Les arguments verbose et rename de namedtuple() sont désormais réservés aux arguments nommés.

Les instances récursives de collections.deque peuvent désormais être sérialisées avec pickle.

hashlib

Les fonctions de hachage BLAKE2 ont été ajoutées au module. blake2b() et blake2s() sont toujours disponibles et prennent en charge l’ensemble des fonctionnalités de BLAKE2.

Les fonctions de hachage SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512(), ainsi que les fonctions de hachage SHAKE shake_128() et shake_256() ont été ajoutées.

La fonction de dérivation de clé basée sur un mot de passe scrypt() est désormais disponible avec OpenSSL 1.1.0 et versions ultérieures.

json

json.load() et json.loads() prennent désormais en charge l’entrée binaire. Le JSON encodé doit être représenté en UTF-8, UTF-16 ou UTF-32.

math

La nouvelle constante math.tau (τ) a été ajoutée

Terminé

os

Une nouvelle méthode close() permet de fermer explicitement un itérateur scandir(). L’itérateur scandir() prend désormais en charge le protocole de gestionnaire de contexte.

Sous Linux, os.urandom() bloque désormais jusqu’à ce que le pool d’entropie urandom du système soit initialisé, afin de renforcer la sécurité.

L’appel système Linux getrandom() (obtention d’octets aléatoires) est désormais exposé sous la forme de la nouvelle fonction os.getrandom().

re

Ajout de la prise en charge des plages de modificateurs dans les expressions régulières. Exemples : “(?i:p)ython” correspond à “python” et “Python”, mais pas à “PYTHON” ; “(?i)g(?-i:v)r” correspond à “GvR” et “gvr”, mais pas à “GVR”.

Les groupes d’un objet match peuvent être accédés via __getitem__, ce qui équivaut à group(). Ainsi, mo[“name”] équivaut désormais à mo.group(“name”).

Les objets match prennent désormais en charge les objets de type index comme indices de groupe.

socket

La fonction ioctl() prend désormais en charge le code de contrôle SIO_LOOPBACK_FAST_PATH.

Les constantes getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC et SO_PASSSEC sont désormais prises en charge.

setsockopt() prend désormais en charge la forme setsockopt(level, optname, None, optlen: int).

Le module socket prend désormais en charge la famille d’adresses AF_ALG pour s’interfacer avec l’API crypto du noyau Linux. ALG_, SOL_ALG et sendmsg_afalg() ont été ajoutés.

De nouvelles constantes Linux TCP_USER_TIMEOUT et TCP_CONGESTION ont été ajoutées.

ssl

ssl prend en charge OpenSSL 1.1.0. La version minimale recommandée est 1.0.2.

Le 3DES a été retiré des suites de chiffrement par défaut et les suites de chiffrement ChaCha20 Poly1305 ont été ajoutées.

SSLContext dispose d’une meilleure configuration par défaut pour les options et les chiffrements.

Une session SSL peut être copiée d’une connexion côté client à une autre grâce à la nouvelle classe SSLSession. La reprise de session TLS peut accélérer la négociation initiale, réduire la latence et améliorer les performances.

La nouvelle méthode get_ciphers() peut être utilisée pour obtenir une liste des chiffrements activés, par ordre de priorité.

Toutes les constantes et tous les drapeaux ont été convertis en IntEnum et IntFlags.

Des protocoles TLS spécifiques aux côtés serveur et client ont été ajoutés pour SSLContext.

Ajout de SSLContext.post_handshake_auth pour activer et de ssl.SSLSocket.verify_client_post_handshake() pour initier l’authentification post-handshake de TLS 1.3.

struct

prend désormais en charge les flottants demi-précision IEEE 754 via le spécificateur de format “e”.

sys

La nouvelle fonction getfilesystemencodeerrors() renvoie le nom du mode d’erreur utilisé pour la conversion entre les noms de fichiers Unicode et les noms de fichiers en octets.

zlib

Les fonctions compress() et decompress() acceptent désormais des arguments nommés

Notes