Se rendre au contenu

Python 3.8 est sorti

14 octobre 2019 par
Python 3.8 est sorti
Makersquad

Date de sortie : 14 octobre 2019

Documentation officielle : What’s New in Python 3.8

Python 3.8 apporte des fonctionnalités qui divisent la communauté. L’opérateur walrus := fait débat (certains adorent, d’autres crient à l’hérésie), mais le = dans les f-strings pour le debug va vous faire gagner un temps fou.


Les nouveautés principales

Opérateur walrus := — l’opérateur qui divise

Assigner et utiliser une valeur dans la même expression :

# Avant
line = f.readline()
while line:
    process(line)
    line = f.readline()

# Après
while (line := f.readline()):
    process(line)

# Dans les compréhensions
[y for x in data if (y := expensive(x)) > 0]


Paramètres positional-only /

Forcer certains paramètres à être passés par position :

def divmod(a, b, /):
    return (a // b, a % b)

divmod(10, 3)      # OK
divmod(a=10, b=3)  # TypeError!

Utile pour les API où le nom du paramètre n’est pas significatif.


= dans les f-strings — self-documenting expressions

Debug facilité :

user = "alice"
count = 42

print(f"{user=} {count=}")
# Output: user='alice' count=42

x = 10
print(f"{x * 2 = }")
# Output: x * 2 = 20


functools.cached_property

Property calculée une seule fois et mise en cache :

from functools import cached_property

class DataSet:
    @cached_property
    def stats(self):
        return expensive_computation(self.data)


typing — TypedDict, Literal, Final

Nouveaux types pour les annotations :

from typing import TypedDict, Literal, Final

class Movie(TypedDict):
    title: str
    year: int

def get_status() -> Literal["ok", "error"]:
    ...

MAX_SIZE: Final = 100


importlib.metadata

Accéder aux métadonnées des packages installés :

from importlib.metadata import version, requires

version("requests")  # '2.28.0'
requires("requests")  # ['charset-normalizer', ...]


Autres améliorations

  • math.prod() — produit d’un itérable
  • statistics.fmean(), geometric_mean(), NormalDist
  • subprocess utilise posix_spawn() (plus rapide)
  • shutil.copytree() avec “fast-copy” syscalls


Échanger avec un expert Python

Nous revenons vers vous sous 24h.


Chez Makersquad, nous mettons notre expertise Python au service de projets ambitieux et durables. Que ce soit pour le développement d’applications web, la conception d’API, l’automatisation de processus, la data ou l’optimisation de performances, nous accompagnons nos clients à chaque étape. Si vous avez un besoin en Python, un nouveau projet, une refonte, un audit: notre équipe est prête à vous aider à concevoir des solutions robustes, évolutives et maintenables.


À retenir

Que vous aimiez ou non le walrus, le f"{x=}" pour le debug est une pépite. cached_property va aussi devenir votre ami si vous calculez des propriétés coûteuses. Python 3.8 est solide.

Django REST Framework 3.10 est sorti