Lancement du langage de programmation Python 3.10

AprÚs un an de développement, une version significative du langage de programmation Python 3.10 a été présentée. Cette nouvelle branche sera maintenue pendant un an et demi, aprÚs quoi des corrections de sécurité seront développées pendant encore trois ans et demi.

SimultanĂ©ment, les tests alpha de la branche Python 3.11 ont dĂ©butĂ© (conformĂ©ment au nouveau calendrier de dĂ©veloppement, le travail sur la nouvelle branche commence cinq mois avant la sortie de la branche prĂ©cĂ©dente et atteint la phase de tests alpha au moment de la sortie suivante). La branche Python 3.11 sera en phase de prĂ©-version alpha pendant sept mois, pĂ©riode durant laquelle de nouvelles fonctionnalitĂ©s seront ajoutĂ©es et des corrections de bogues seront effectuĂ©es. Ensuite, pendant trois mois, des tests de versions bĂȘta seront effectuĂ©s, oĂč l'ajout de nouvelles fonctionnalitĂ©s sera interdit et toute l'attention sera portĂ©e Ă  la correction des erreurs. Les deux derniers mois avant la sortie, la branche sera en phase de candidats Ă  la sortie, qui aboutira Ă  une stabilisation finale.

Parmi les nouveautés ajoutées à Python 3.10 :

  • Des opĂ©rateurs « match » et « case » pour la correspondance des modĂšles ont Ă©tĂ© implĂ©mentĂ©s, permettant d'amĂ©liorer la lisibilitĂ© du code, de simplifier la correspondance des objets Python arbitraires et d'augmenter la fiabilitĂ© du code grĂące Ă  la possibilitĂ© de vĂ©rification statique de types avancĂ©e. L'implĂ©mentation ressemble beaucoup Ă  l'opĂ©rateur « match » fourni dans les langages Scala, Rust et F#, qui effectue une comparaison du rĂ©sultat de l'exĂ©cution de l'expression spĂ©cifiĂ©e avec une liste de modĂšles, Ă©numĂ©rĂ©s dans des blocs basĂ©s sur l'opĂ©rateur « case ».

    def http_error(status): match status: case 400: return « Bad request » case 401|403|404: return « Not allowed » case 418: return « I’m a teapot » case _: return « Something else »

    Il est possible de dĂ©composer des objets, des tuples, des listes et des sĂ©quences arbitraires pour lier des variables en fonction des valeurs existantes. La dĂ©finition de modĂšles imbriquĂ©s est autorisĂ©e, l'utilisation de conditions supplĂ©mentaires « if » dans le modĂšle, l'application de masques (« [x, y, *rest] »), le mappage de paires clĂ©/valeur (par exemple, {« bandwidth »: b, « latency »: l} pour extraire les valeurs « bandwidth » et « latency » d'un dictionnaire), l'extraction de sous-modĂšles (opĂ©rateur « := »), et l'utilisation de constantes nommĂ©es dans le modĂšle. Dans les classes, le comportement lors du mappage peut ĂȘtre configurĂ© Ă  l'aide de la mĂ©thode « __match__() ».

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print(«Origine») case Point(0, y): print(f»Y={y}») case Point(x, 0): print(f»X={x}») case Point(): print(«Quelque part ailleurs») case _: print(«Pas un point») match point: case Point(x, y) if x == y: print(f»Y=X à {x}») case Point(x, y): print(f»Pas sur la diagonale») RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print(«Je vois rouge !») case GREEN: print(«L'herbe est verte») case BLUE: print(«Je suis dans le blues :(«)

  • La possibilitĂ© d'utiliser des parenthĂšses dans l'instruction with pour rĂ©partir sur plusieurs lignes la dĂ©finition d'un groupe de gestionnaires de contexte a Ă©tĂ© ajoutĂ©e. Il est Ă©galement permis de laisser une virgule aprĂšs le dernier gestionnaire de contexte dans le groupe : with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): 

  • L'information sur la localisation des erreurs liĂ©es aux accolades non fermĂ©es et aux guillemets dans les littĂ©raux de chaĂźne a Ă©tĂ© amĂ©liorĂ©e. Par exemple, en cas d'accolade non fermĂ©e, au lieu de signaler une erreur de syntaxe dans la construction suivante, le pointeur met dĂ©sormais en surbrillance l'accolade ouvrante et indique qu'il manque un bloc de fermeture. File «example.py», line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: ‘{‘ n'a jamais Ă©tĂ© fermĂ©

    Des messages d'erreur de syntaxe supplĂ©mentaires ont Ă©tĂ© ajoutĂ©s : absence du caractĂšre « : » avant un bloc et dans les dictionnaires, absence de parenthĂšses pour le tuple, absence de virgule dans les listes, spĂ©cification du bloc « try » sans « except » et « finally », utilisation de « = » au lieu de « == » dans les comparaisons, mention de *-expressions dans les f-strings. De plus, il est maintenant possible de mettre en Ă©vidence toute l'expression problĂ©matique plutĂŽt que seulement son dĂ©but, ainsi qu'une information plus explicite sur le contexte des erreurs liĂ©es Ă  une mauvaise indentation. >>> def foo(): 
 if lel: 
 x = 2 File « », line 3 x = 2 ^ IndentationError: expected an indented block after ‘if’ statement in line 2

    Pour les erreurs causĂ©es par des fautes de frappe dans les noms d'attributs et de variables dans une fonction, une recommandation avec le bon nom est dĂ©sormais affichĂ©e. >>> collections.namedtoplo Traceback (most recent call last): File « », line 1, in AttributeError: module ‘collections’ has no attribute ‘namedtoplo’. Did you mean: namedtuple?

  • Pour les outils de dĂ©bogage et les profileurs, la possibilitĂ© d'indiquer dans les Ă©vĂ©nements de suivi les numĂ©ros de ligne exacts du code exĂ©cutĂ© a Ă©tĂ© ajoutĂ©e.
  • Un paramĂštre sys.flags.warn_default_encoding a Ă©tĂ© ajoutĂ© pour afficher un avertissement concernant les erreurs potentielles liĂ©es au traitement dans TextIOWrapper et open() des fichiers en UTF-8 sans spĂ©cification explicite de l'option ‘encoding="utf-8"’ (l'encodage ASCII est utilisĂ© par dĂ©faut). De plus, la nouvelle version permet de spĂ©cifier la valeur ‘encoding="locale"’ pour dĂ©finir l'encodage en fonction de la locale actuelle.
  • Dans le module typing, qui fournit des outils pour les annotations de types, un nouvel opĂ©rateur a Ă©tĂ© ajoutĂ©, permettant d'utiliser la syntaxe « X | Y » pour choisir l'un des types (type X ou type Y). def square(number: int | float) -> int | float: return number ** 2 Ă©quivalent Ă  la construction prĂ©cĂ©demment prise en charge : def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • Le module typing a ajoutĂ© l'opĂ©rateur Concatenate et la variable ParamSpec, qui permettent de transmettre des informations supplĂ©mentaires pour la vĂ©rification statique des types lors de l'utilisation de Callable. Le module typing a Ă©galement ajoutĂ© des valeurs spĂ©ciales TypeGuard pour annoter les fonctions de protection des types et TypeAlias pour dĂ©finir explicitement un alias de type. StrCache: TypeAlias = ‘Cache[str]’ # un alias de type
  • La fonction zip() comporte un drapeau optionnel « strict », qui, lorsqu'il est activĂ©, vĂ©rifie que les arguments parcourus ont la mĂȘme longueur. >>> list(zip((‘a’, ‘b’, ‘c’), (1, 2, 3), strict=True)) [(‘a’, 1), (‘b’, 2), (‘c’, 3)] >>> list(zip(range(3), [‘fee’, ‘fi’, ‘fo’, ‘fum’], strict=True)) Traceback (dernier appel le plus rĂ©cent) : 
 ValueError: l'argument 2 de zip() est plus long que l'argument 1
  • De nouvelles fonctions intĂ©grĂ©es aiter() et anext() ont Ă©tĂ© proposĂ©es, qui rĂ©alisent des analogues asynchrones des fonctions iter() et next().
  • Les constructeurs str(), bytes() et bytearray() fonctionnent de 30 Ă  40 % plus rapidement avec de petits objets.
  • Le nombre d'opĂ©rations d'importation dans le module runpy a Ă©tĂ© rĂ©duit. La commande « python3 -m nom_du_module » s'exĂ©cute dĂ©sormais en moyenne 1,4 fois plus rapidement grĂące Ă  la rĂ©duction des modules importĂ©s de 69 Ă  51.
  • L'instruction LOAD_ATTR utilise un mĂ©canisme de mise en cache de certains opcodes, permettant d'accĂ©lĂ©rer l'accĂšs aux attributs classiques de 36 % et aux slots de 44 %.
  • Lors de la compilation de Python avec l'option « —enable-optimizations », le mode « -fno-semantic-interposition » est dĂ©sormais activĂ©, ce qui permet d'accĂ©lĂ©rer l'interprĂ©teur jusqu'Ă  30 % par rapport Ă  la compilation avec l'option « —enable-shared ».
  • Dans les modules hashlib et ssl la prise en charge d'OpenSSL 3.0.0 a Ă©tĂ© ajoutĂ©e et la prise en charge des versions OpenSSL antĂ©rieures Ă  1.1.1 a Ă©tĂ© interrompue.
  • L'ancien analyseur a Ă©tĂ© supprimĂ©, remplacĂ© par l'analyseur PEG (Parsing Expression Grammar) introduit dans la version prĂ©cĂ©dente. Le module formatter a Ă©tĂ© retirĂ©. Le paramĂštre loop a Ă©tĂ© supprimĂ© de l'API asyncio. Les mĂ©thodes prĂ©cĂ©demment dĂ©clarĂ©es obsolĂštes ont Ă©tĂ© supprimĂ©es. Les fonctions Py_UNICODE_str* qui manipulaient les chaĂźnes Py_UNICODE* ont Ă©tĂ© supprimĂ©es.
  • Le module distutils a Ă©tĂ© dĂ©clarĂ© obsolĂšte et est prĂ©vu pour suppression dans Python 3.12. Il est recommandĂ© d'utiliser les modules setuptools, packaging, platform, shutil, subprocess et sysconfig Ă  la place de distutils. La structure wstr dans PyUnicodeObject a Ă©galement Ă©tĂ© classĂ©e parmi les Ă©lĂ©ments obsolĂštes et prĂ©vus pour suppression.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster