Vrystelling van die Python 3.10-programmeertaal

Na 'n jaar van ontwikkeling word die beduidende vrystelling van die Python 3.10-programmeertaal aangebied. Die nuwe tak sal vir een en 'n half jaar ondersteun word, waarna vir nog drie en 'n half jaar regstellings daarvoor gegenereer sal word om kwesbaarhede uit te skakel.

Terselfdertyd het alfa-toetsing van die Python 3.11-tak begin (in ooreenstemming met die nuwe ontwikkelingskedule, werk aan 'n nuwe tak begin vyf maande voor die vrystelling van die vorige tak en bereik die alfa-toetsstadium teen die tyd van die volgende vrystelling ). Die Python 3.11-tak sal vir sewe maande in alfa-vrystelling wees, waartydens nuwe funksies bygevoeg en foute reggestel sal word. Hierna sal beta-weergawes vir drie maande getoets word, waartydens die toevoeging van nuwe kenmerke verbied sal word en alle aandag sal gegee word aan die regstelling van foute. Vir die laaste twee maande voor die vrystelling sal die tak in die vrystellingskandidaatstadium wees, waarop finale stabilisering uitgevoer sal word.

Nuwe toevoegings tot Python 3.10 sluit in:

  • Implementeer "pas"- en "geval"-operateurs vir patroonpassing, wat kodeleesbaarheid verbeter, passing van arbitrêre Python-voorwerpe vereenvoudig, en kodebetroubaarheid verhoog deur gevorderde statiese tipe kontrolering. Die implementering is baie soos die "pas"-operateur wat in Scala, Rust en F# verskaf word, wat die resultaat van 'n gespesifiseerde uitdrukking vergelyk met 'n lys patrone wat in blokke gelys word, gebaseer op die "geval"-operateur.

    def http_error(status): passtatus: geval 400: gee terug "Slegte versoek" geval 401|403|404: gee terug "Nie toegelaat nie" geval 418: gee terug "Ek is 'n teepot" geval _: gee terug "Iets anders"

    Jy kan voorwerpe, tupels, lyste en arbitrêre rye uitpak om veranderlikes op grond van bestaande waardes te bind. Dit word toegelaat om geneste sjablone te definieer, addisionele "as" voorwaardes in die sjabloon te gebruik, maskers te gebruik ("[x, y, *rus]"), sleutel-/waarde-afbeeldings (byvoorbeeld, {"bandwydte": b, "latency" ”: l} om "bandwydte" en "latency" waardes uit 'n woordeboek te onttrek), onttrek subtemplates (":=" operateur), gebruik benoemde konstantes in 'n sjabloon. In klasse is dit moontlik om ooreenstemmende gedrag aan te pas deur die "__match__()" metode te gebruik.

    van dataklasse invoer dataklas @dataklas klas Punt: x: int y: int def whereis(punt): paspunt: geval Punt(0, 0): druk("Oorsprong") geval Punt(0, y): druk(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Iewers anders") case _: print("Nie 'n punt nie") pas punt: geval Punt(x, y) as x == y: druk(f"Y=X by {x}") geval Punt(x, y): druk(f"Nie op die diagonaal nie") ROOI, GROEN, BLOU = 0, 1, 2 pas kleur: kas ROOI: druk(“Ek sien rooi!”) kas GROEN: druk(“Gras is groen”) kas BLOU: druk(“Ek voel die blou :(“)

  • Dit is nou moontlik om hakies in die with-stelling te gebruik om die definisie van 'n versameling konteksbestuurders oor verskeie lyne te verdeel. Dit word ook toegelaat om 'n komma na die finale konteksbestuurder in die groep te laat: met ( CtxManager1() as voorbeeld1, CtxManager2() as voorbeeld2, CtxManager3() as voorbeeld3, ): ...
  • Verbeterde rapportering van die kode-ligging van foute wat verband hou met ongeslote hakies en aanhalings in stringletters. Byvoorbeeld, wanneer daar 'n ongeslote hakie is, in plaas daarvan om 'n sintaksfout in die volgende konstruk aan te meld, beklemtoon die wyser nou die openingstut en dui aan dat daar geen sluitblok is nie. Lêer "example.py", reël 1 verwag = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' was nooit gesluit nie

    Bykomende gespesialiseerde sintaksisfoutboodskappe bygevoeg: ontbrekende ":"-simbool voor 'n blok en in woordeboeke, skei nie 'n tupel met hakies nie, ontbreek 'n komma in lyste, spesifiseer 'n "probeer"-blok sonder "behalwe" en "uiteindelik", met behulp van "= " in plaas van "= =" in vergelykings, spesifiseer *-uitdrukkings in f-stringe. Daarbenewens verseker dit dat die hele problematiese uitdrukking uitgelig word, nie net die begin nie, en meer eksplisiete inligting oor die konteks van foute wat met verkeerde inkeping geassosieer word. >>> def foo(): ... if lel: ... x = 2 Lêer " ", reël 3 x = 2 ^ IndentationError: 'n ingekeepde blok verwag na 'if'-stelling in reël 2

    In foute wat veroorsaak word deur tikfoute in die name van eienskappe en veranderlike name in 'n funksie, word 'n aanbeveling met die korrekte naam uitgevoer. >>>collections.namedtoplo Traceback (mees onlangse oproep laaste): Lêer « ", reël 1, in AttributeError: module 'versamelings' het geen kenmerk 'namedtoplo' nie. Bedoel jy: nametuple?

  • Vir ontfoutingsnutsgoed en profileerders word spoorgebeurtenisse voorsien met die presiese reëlnommers van die uitgevoer kode.
  • Het die sys.flags.warn_default_encoding-instelling bygevoeg om 'n waarskuwing te vertoon oor potensiële foute wat verband hou met TextIOWrapper en oop() verwerking van UTF-8-gekodeerde lêers sonder om die 'encoding=»utf-8″'-opsie uitdruklik te spesifiseer (ASCII-enkodering word by verstek gebruik) . Die nuwe vrystelling bied ook die vermoë om 'n 'encoding="locale"'-waarde te spesifiseer om die enkodering op grond van die huidige locale te stel.
  • 'n Nuwe operateur is by die tikmodule gevoeg, wat gereedskap verskaf om tipe-aantekeninge te spesifiseer, wat die gebruik van die sintaksis "X | Y" om een ​​van die tipes (X-tipe of Y-tipe) te kies. def square(nommer: int | float) -> int | float: terugkeer getal ** 2 is gelykstaande aan die voorheen ondersteunde konstruk: def square(nommer: Unie[int, float]) -> Unie[int, float]: terugkeer getal ** 2
  • Die Concatenate-operateur en die ParamSpec-veranderlike is by die tikmodule gevoeg, wat jou toelaat om bykomende inligting deur te gee vir statiese tipe-kontrolering wanneer Callable gebruik word. Die tikmodule voeg ook spesiale waardes TypeGuard by om tipebeskermingsfunksies te annoteer en TypeAlias ​​om 'n tipe alias uitdruklik te definieer. StrCache: TypeAlias ​​​​= 'Cache[str]' # 'n tipe alias
  • Die zip()-funksie implementeer 'n opsionele "streng" vlag, wat, wanneer gespesifiseer, kontroleer of die argumente wat herhaal word, dieselfde lengte is. >>> lys(zip(('a', 'b', 'c'), (1, 2, 3), strict=Waar)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(reeks(3), ['fee', 'fi', 'fo', 'fum'], strict=Waar)) Traceback (mees onlangse oproep laaste ): … ValueError: zip() argument 2 is langer as argument 1
  • Nuwe ingeboude funksies aiter() en anext() word voorgestel met die implementering van asynchrone analoë tot die funksies iter() en next().
  • Die werk van die str(), bytes() en bytearray()-konstruktors wanneer daar met klein voorwerpe gewerk word, is met 30-40% versnel.
  • Verminder die aantal invoerbewerkings in die runpy-module. Die opdrag "python3 -m module_name" loop nou gemiddeld 1.4 keer vinniger as gevolg van die vermindering van ingevoerde modules van 69 tot 51.
  • Die LOAD_ATTR-instruksie gebruik 'n kasmeganisme vir individuele opkodes, wat dit moontlik gemaak het om werk met gereelde eienskappe met tot 36% en met gleuwe met tot 44% te bespoedig.
  • Wanneer Python gebou word met die "--enable-optimizations"-opsie, is die "-fno-semantic-interposition"-modus nou geaktiveer, wat dit moontlik maak om die tolk met tot 30% te bespoedig in vergelyking met die bou met die "--enable-shared " opsie.
  • Die hashlib- en ssl-modules het ondersteuning vir OpenSSL 3.0.0 bygevoeg en het opgehou om OpenSSL-weergawes ouer as 1.1.1 te ondersteun.
  • Die ou ontleder is verwyder, wat in die vorige tak vervang is deur die PEG (Parsing Expression Grammar) ontleder. Die formateermodule is verwyder. Die lusparameter is van die asyncio-API verwyder. Metodes wat voorheen opgeskort is, is verwyder. Die Py_UNICODE_str*-funksies wat Py_UNICODE*-stringe manipuleer, is verwyder.
  • Die distutils-module is opgeskort en is geskeduleer vir verwydering in Python 3.12. In plaas van distutils, word dit aanbeveel om die setuptools, verpakking, platform, shutil, subproses en sysconfig modules te gebruik. Die wstr-struktuur in PyUnicodeObject is afgekeur en geskeduleer vir verwydering.

Bron: opennet.ru

Voeg 'n opmerking