Llançament del llenguatge de programació Python 3.10

Després d'un any de desenvolupament, es presenta l'important llançament del llenguatge de programació Python 3.10. La nova branca tindrà suport durant un any i mig, després del qual durant tres anys i mig més es generaran correccions per eliminar vulnerabilitats.

Al mateix temps, van començar les proves alfa de la branca de Python 3.11 (d'acord amb el nou calendari de desenvolupament, el treball en una nova branca comença cinc mesos abans del llançament de la branca anterior i arriba a l'etapa de proves alfa en el moment de la propera versió). ). La branca de Python 3.11 estarà en versió alfa durant set mesos, durant els quals s'afegiran noves funcions i es solucionaran els errors. Després d'això, les versions beta es provaran durant tres mesos, durant els quals es prohibirà afegir noves funcions i es prestarà tota l'atenció a la correcció d'errors. Durant els dos últims mesos abans de l'alliberament, la branca estarà en l'etapa de candidat a l'alliberament, en la qual es realitzarà l'estabilització final.

Les noves incorporacions a Python 3.10 inclouen:

  • S'han implementat operadors de "concordança" i "majúscules" per a la concordança de patrons, que milloren la llegibilitat del codi, simplifiquen la concordança d'objectes Python arbitraris i augmenten la fiabilitat del codi mitjançant la comprovació avançada de tipus estàtic. La implementació és molt semblant a l'operador "coincidència" proporcionat a Scala, Rust i F#, que compara el resultat d'una expressió especificada amb una llista de patrons llistats en blocs basats en l'operador "cas".

    def http_error(estat): Estat de la coincidència: cas 400: retorna “Sol·licitud incorrecta” cas 401|403|404: retorna “No es permet” cas 418: retorna “Sóc una tetera” cas _: retorna “Alguna altra cosa”

    Podeu desempaquetar objectes, tuples, llistes i seqüències arbitràries per enllaçar variables basades en valors existents. Es permet definir plantilles imbricades, utilitzar condicions addicionals "si" a la plantilla, utilitzar màscares ("[x, y, *rest]"), mapes clau/valor (per exemple, {"amplada de banda": b, "latencia") ”: l} per extreure valors d'"amplada de banda" i "latencia" d'un diccionari), extreure subplantilles ("operador:="), utilitzar constants anomenades en una plantilla. A les classes, és possible personalitzar el comportament de concordança mitjançant el mètode "__match__()".

    des de classes de dades importar classe de dades @classe de dades Punt: x: int y: int def whereis(punt): punt de concordança: cas Punt (0, 0): print("Origen") case Point(0, y): imprimir(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("En un altre lloc") case _: print("No és un punt") coincidència punt: cas Punt (x, y) si x == y: imprimir(f"Y=X a {x}") cas Punt (x, y): imprimir (f"No a la diagonal") VERMELL, VERD, BLAU = 0, 1, 2 coincideix amb el color: cas VERMELL: imprimir ("Veig vermell!") caixa VERD: imprimir ("L'herba és verda") cas BLAU: imprimir ("Estic sentint el blau :(“)

  • Ara és possible utilitzar parèntesis a la instrucció with per dividir la definició d'una col·lecció de gestors de context en diverses línies. També es permet deixar una coma després del gestor de context final del grup: amb ( CtxManager1() com a exemple1, CtxManager2() com a exemple2, CtxManager3() com a exemple3, ): ...
  • Informe millorat de la ubicació del codi d'errors relacionats amb claus i cometes no tancades en literals de cadena. Per exemple, quan hi ha una clau sense tancar, en lloc d'informar d'un error de sintaxi a la construcció següent, el punter ara ressalta la clau d'obertura i indica que no hi ha cap bloc de tancament. Fitxer "example.py", línia 1 esperada = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' mai es va tancar

    S'han afegit missatges d'error de sintaxi especialitzats addicionals: falta el símbol ":" abans d'un bloc i als diccionaris, no separa una tupla amb parèntesis, manca una coma a les llistes, especifica un bloc "prova" sense "excepte" i "finalment", utilitzant "=". " en lloc de "= =" a les comparacions, especificant expressions * en cadenes f. A més, assegura que es ressalti tota l'expressió problemàtica, no només el principi, i una informació més explícita sobre el context d'errors associats a un sagnat incorrecte. >>> def foo(): ... if lel: ... x = 2 Fitxer " ", línia 3 x = 2 ^ IndentationError: s'esperava un bloc amb sagnat després de la instrucció 'if' a la línia 2

    En els errors causats per errors tipogràfics en els noms dels atributs i dels noms de les variables d'una funció, s'emet una recomanació amb el nom correcte. >>>collections.namedtoplo Traceback (última trucada): Fitxer « ", línia 1, a AttributeError: el mòdul 'col·leccions' no té cap atribut 'namedtoplo'. Volíeu dir: namedtuple?

  • Per a les eines de depuració i els perfiladors, els esdeveniments de traça es proporcionen amb els números de línia exactes del codi executat.
  • S'ha afegit la configuració sys.flags.warn_default_encoding per mostrar un avís sobre possibles errors associats amb TextIOWrapper i open() processant fitxers codificats UTF-8 sense especificar explícitament l'opció 'encoding=»utf-8″' (la codificació ASCII s'utilitza per defecte) . La nova versió també ofereix la possibilitat d'especificar un valor "encoding="locale"" per establir la codificació en funció de la configuració regional actual.
  • S'ha afegit un nou operador al mòdul de mecanografia, que proporciona eines per especificar anotacions de tipus, permetent l'ús de la sintaxi “X | Y" per seleccionar un dels tipus (tipus X o tipus Y). def quadrat (número: int | float) -> int | float: número de retorn ** 2 és equivalent a la construcció suportada anteriorment: def quadrat (número: Union[int, float]) -> Union[int, float]: nombre de retorn ** 2
  • L'operador Concatenar i la variable ParamSpec s'han afegit al mòdul d'escriptura, que us permeten passar informació addicional per a la verificació de tipus estàtic quan feu servir Callable. El mòdul d'escriptura també afegeix valors especials TypeGuard per anotar funcions de protecció de tipus i TypeAlias ​​per definir explícitament un àlies de tipus. StrCache: TypeAlias ​​​​= 'Cache[str]' # un àlies de tipus
  • La funció zip() implementa un indicador opcional "estricte", que, quan s'especifica, verifica si els arguments que s'iteren tenen la mateixa longitud. >>> llista(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['tarifa', 'fi', 'fo', 'fum'], strict=True)) Traceback (última trucada més recent ): … ValueError: l'argument 2 de zip() és més llarg que l'argument 1
  • Es proposen noves funcions integrades aiter() i anext() amb la implementació d'anàlegs asíncrons a les funcions iter() i next().
  • El treball dels constructors str(), bytes() i bytearray() quan es treballa amb objectes petits s'ha accelerat en un 30-40%.
  • S'ha reduït el nombre d'operacions d'importació al mòdul runpy. L'ordre "python3 -m module_name" ara s'executa de mitjana 1.4 vegades més ràpid a causa de la reducció dels mòduls importats de 69 a 51.
  • La instrucció LOAD_ATTR utilitza un mecanisme de memòria cau per a codis operatius individuals, que va permetre accelerar el treball amb atributs normals fins a un 36% i amb ranures fins a un 44%.
  • Quan es construeix Python amb l'opció "--enable-optimizations", ara està habilitat el mode "-fno-semantic-interposition", que permet accelerar l'intèrpret fins a un 30% en comparació amb la construcció amb "--enable-shared". ” opció.
  • Els mòduls hashlib i ssl han afegit suport per a OpenSSL 3.0.0 i han deixat de donar suport a les versions d'OpenSSL anteriors a la 1.1.1.
  • S'ha eliminat l'analitzador antic, que va ser substituït a la branca anterior per l'analitzador PEG (Parsing Expression Grammar). S'ha eliminat el mòdul del formatador. El paràmetre de bucle s'ha eliminat de l'API asyncio. S'han eliminat els mètodes que abans estaven obsolets. S'han eliminat les funcions Py_UNICODE_str* que manipulen les cadenes Py_UNICODE*.
  • El mòdul distutils ha estat obsolet i està programat per eliminar-lo a Python 3.12. En lloc de distutils, es recomana utilitzar els mòduls setuptools, packaging, platform, shutil, subprocess i sysconfig. L'estructura wstr de PyUnicodeObject ha quedat obsoleta i s'ha programat per eliminar-la.

Font: opennet.ru

Afegeix comentari