BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

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

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

Favoris

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

Contenu Éducatif

BT