BT

Python 3.6 offre de meilleurs Dictionnaires, améliore Async I/O, et bien plus

| par Sergio De Simone Suivre 14 Abonnés , traduit par Stéphane Wojewoda Suivre 11 Abonnés le 20 déc. 2016. Durée de lecture estimée: 2 minutes |

Python arrive à son prochain jalon important, la version 3.6. Avec une release attendue pour décembre 2016, Python 3.6 apporte beaucoup de nouvelles fonctionnalités, dont des dictionnaires plus rapides et compacts, une amélioration de asyncio, un nouveau protocole de gestion des chemins d'accès au système de fichiers, et bien plus encore.

Python 3.6 introduit des améliorations sur le type dict qui réduit l'empreinte mémoire de près de 20% par rapport à Python 3.5. Le langage utilise une nouvelle représentation similaire à celle de PyPy et a montré qu'elle améliore aussi la performance du garbage collector.

La nouvelle version simplifie aussi la création de sous-classes sur mesure grâce à la nouvelle méthode __init_subclass__ qui appelle la classe mère à chaque création de sous-classe :

class PluginBase:
    subclasses = []

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.subclasses.append(cls)

class Plugin1(PluginBase):
    pass

class Plugin2(PluginBase):
    pass

 

Ce nouveau mécanisme est une sorte d'alternative simplifiée à l'usage du mécanisme de metaclass pour la customisation de classe.

Sur le sujet de la librairie standard, il y a de nombreuses améliorations ou nouveaux modules à citer : le module asyncio n'est plus provisoire et son API est considérée comme stable, tandis que le nouveau module secrets propose une manière fiable de générer des valeurs pseudo-aléatoires cryptographiquement fortes, comme celles requises pour gérer l'authentification, les jetons, etc. De plus, le module typing, qui implémente les spécifications du type hints, est passé au statut stable.

Les autres fonctionnalités de Python 3.6 sont :

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
'result:      12.35'

 

  • Les soulignements dans les numériques, qui permettent d'écrire :
>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295

 

  • Les générateurs asynchrones rendus possibles en éliminant les contraintes de await et async qui ne pouvaient être utilisés dans le même corps de fonction :
 async def ticker(delay, to): 
     """Yield numbers from 0 to *to* every *delay* seconds."""
     for i in range(to):
         yield i
         await asyncio.sleep(delay) 

 

 result = [i async for i in aiter() if i % 2] 

 

La liste complète des nouvelles améliorations de Python 3.6 sont dans le document what’s new.

Evaluer cet article

Pertinence
Style

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Donnez-nous votre avis

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet
Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Discuter

Se connecter à InfoQ pour interagir sur ce qui vous importe le plus.


Récupérer votre mot de passe

Follow

Suivre vos sujets et éditeurs favoris

Bref aperçu des points saillants de l'industrie et sur le site.

Like

More signal, less noise

Créez votre propre flux en choisissant les sujets que vous souhaitez lire et les éditeurs dont vous désirez suivre les nouvelles.

Notifications

Restez à jour

Paramétrez vos notifications et ne ratez pas le contenu qui vous importe

BT