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.