Quoi de neuf dans Python 3.11

Feb 20 2023
Python 3.11.

Python 3.11.2 est la version la plus récente du langage de programmation populaire et comprend un certain nombre de nouvelles fonctionnalités et améliorations. Dans cet article de blog, nous examinerons certaines des nouvelles fonctionnalités de Python 3.11 et donnerons un exemple de code pour vous aider à démarrer.

Résumé

Python 3.11 est 10 à 60 % plus rapide que 3.10. Mesuré une accélération de 1,25x sur la suite de référence standard. Il y a exception, speed, syntaxdes améliorations.

Des exceptions

À partir de maintenant, vous pouvez déclencher plusieurs exceptions en utilisant des groupes d'exceptions.

La PEP 654 introduit des fonctionnalités de langage qui permettent à un programme de déclencher et de gérer simultanément plusieurs exceptions non liées. Les types intégrésExceptionGroupetBaseExceptionGrouppermettent de regrouper des exceptions et de les déclencher ensemble, et la nouvelleexcept*syntaxe se généraliseexceptpour correspondre à des sous-groupes de groupes d'exceptions.

https://docs.python.org/3/whatsnew/3.11.html#whatsnew311-pep654

Vous pouvez également ajouter des notes à votre exception en utilisant cela, vous pouvez donner plus d'informations facilement. Vous devez attraper l'exception en utilisant try exceptpuis vous devez ajouter une note et la relancer

try:
    i = 1 / 0
except Exception as e:
    e.add_note("New Note: Zero Division Error")
    raise
Traceback (most recent call last):
  File "C:/Users/Sarper/Desktop/test.py", line 2, in <module>
    i = 1 / 0
ZeroDivisionError: division by zero
New Note: Zero Division Error

Le nouveau type est add, Selfce qui est normal self.

Nouvelles fonctionnalités liées aux conseils de type

Cette section couvre les modifications majeures affectant les conseils de type PEP 484 et le typingmodule.

Voici un exemple:

from typing import Self

class MyClass:
    def __init__(self, num):
        self.num = num

    def create_class(self) -> Self:
        return MyClass(3) # returning new class

my_class = MyClass(2)
print(my_class.create_class())

# OUTPUT:
# <__main__.MyClass object at 0x000002477E1D0250>
from typing import Self

class MyClass:
    def __init__(self, num):
        self.num = num

    def return_class(self) -> Self:
        return self # returning self

my_class = MyClass(2)
print(my_class.return_class())

# OUTPUT:
<__main__.MyClass object at 0x0000014B89E71350>

Requiredet NotRequiredfournir un moyen simple de marquer si des éléments individuels dans a TypedDictdoivent être présents. Auparavant, cela n'était possible qu'en utilisant l'héritage.

Tous les champs sont toujours obligatoires par défaut, sauf si le paramètre total est défini sur False, auquel cas tous les champs ne sont toujours pas obligatoires par défaut. Par exemple, ce qui suit spécifie a TypedDictavec une clé requise et une clé non requise :

La création de dictionnaires spéciaux est une capacité puissante si vous souhaitez créer des bibliothèques et réduire les erreurs pouvant survenir de la part de l'utilisateur.

class Movie(TypedDict):
   title: str
   year: NotRequired[int]

m1: Movie = {"title": "Black Panther", "year": 2018}  # OK
m2: Movie = {"title": "Star Wars"}  # OK (year is not required)
m3: Movie = {"year": 2022}  # ERROR (missing required field title)

class Movie(TypedDict, total=False):
   title: Required[str]
   year: int

asyncio contextlib dataclasses datatime enum fcntl fractions functools haslib inpect locale logging math operator os pathlib re shutlit socket sqlite3 string sys sysconfig tempfile threading time tkinter traceback typing unicodedata unittest venv warnings zipfile

Regardez ici pour plus d'informations

Accélérations des opérations

  • Opérations binaires x+x; x*x; x-x;10%
  • Indice a[i]10–25%
  • Enregistrer l'indice a[i] = z10–25 %
  • Appels f(arg) C(arg)20%
  • Charger la variable globale print len[1 ]
  • Charger l'attribut o.attr[ 3]
  • Méthodes de chargement pour l'appel o.meth()10–20 %
  • Attribut de magasin o.attr = z2 % dans pyperformance
  • Déballer la séquence *seq8 %

Source

https://docs.python.org/3/whatsnew/3.11.html