Release fan de Python 3.10 programmeartaal

Nei in jier fan ûntwikkeling wurdt de wichtige frijlitting fan 'e programmeartaal Python 3.10 presintearre. De nije branch wurdt foar oardel jier stipe, wêrnei't noch trije en in heal jier der reparaasjes foar generearre wurde om kwetsberens op te heljen.

Tagelyk begon alpha-testen fan 'e Python 3.11-tûke (yn oerienstimming mei it nije ûntwikkelingskema begjint it wurk oan in nije tûke fiif moanne foar de frijlitting fan' e foarige tûke en berikt it alpha-teststadium op 'e tiid fan' e folgjende release ). De Python 3.11-tûke sil sân moannen yn alpha-release wêze, wêryn nije funksjes sille wurde tafoege en bugs repareare. Hjirnei sille beta-ferzjes trije moannen wurde hifke, wêryn it tafoegjen fan nije funksjes ferbean wurdt en alle oandacht sil wurde betelle oan it reparearjen fan bugs. Foar de lêste twa moannen foar de frijlitting sil de tûke yn 'e frijlittingskandidaatstadium wêze, wêryn definitive stabilisaasje sil wurde útfierd.

Nije tafoegings oan Python 3.10 omfetsje:

  • Implementearre "match" en "case" operators foar patroan oerienkomst, dy't ferbetterje koade lêsberens, ferienfâldigje matching fan willekeurige Python objekten, en fergrutsje koade betrouberens troch avansearre statyske type kontrôle. De ymplemintaasje is in protte as de "match" operator foarsjoen yn Scala, Rust, en F #, dy't fergeliket it resultaat fan in spesifisearre útdrukking mei in list fan patroanen neamd yn blokken basearre op de "case" operator.

    def http_error (status): wedstriid status: gefal 400: werom "Min fersyk" gefal 401 | 403 | 404: werom "Net tastien" gefal 418: werom "Ik bin in teepot" gefal _: werom "Iets oars"

    Jo kinne objekten, tuples, listen en willekeurige sekwinsjes útpakke om fariabelen te binen op basis fan besteande wearden. It is tastien om geneste sjabloanen te definiearjen, ekstra "as"-betingsten yn 'e sjabloan te brûken, maskers brûke ("[x, y, *rest]"), kaai-/wearde-mappings (bygelyks {"bânbreedte": b, "latency" ”: l} om "bânbreedte" en "latency" wearden út in wurdboek te ekstrahearjen), subtemplates (":=" operator) ekstrahearje, brûke neamde konstanten yn in sjabloan. Yn klassen is it mooglik om oerienkommende gedrach oan te passen mei de metoade "__match__ ()".

    fan dataklassen ymportearje dataklasse @dataclass klasse Punt: x: int y: int def whereis(punt): wedstriidpunt: gefal Punt(0, 0): print("Origin") gefal Punt(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point") match punt: gefal Punt(x, y) as x == y: print(f"Y=X by {x}") gefal Punt(x, y): print(f"Net op de diagonaal") ROOD, GREEN, BLAUW = 0, 1, 2 komt oerien mei kleur: kast RED: print(“Ik sjoch read!”) gefal GREEN: print(“Gêrs is grien”) gefal BLAU: print(“Ik fiel de blues:(“)

  • It is no mooglik om heakjes te brûken yn 'e with statement om de definysje fan in samling kontekstbehearders oer meardere rigels te splitsen. It is ek tastien om in komma efter de lêste kontekstbehearder yn 'e groep te litten: mei ( CtxManager1 () as foarbyld1, CtxManager2 () as foarbyld2, CtxManager3 () as foarbyld3, ): ...
  • Ferbettere rapportaazje fan 'e koadelokaasje fan flaters yn ferbân mei net-sletten beugels en sitaten yn lettertekens. Bygelyks, as d'r in net-sletten beugel is, ynstee fan in syntaksisflater te rapportearjen yn 'e folgjende konstruksje, markearret de oanwizer no de iepeningsbeugel en jout oan dat d'r gjin slutingsblok is. Triem "example.py", line 1 ferwachte = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' wie nea sletten

    Added ekstra spesjalisearre syntaksis flater berjochten: ûntbrekt ":" symboal foar in blok en yn wurdboeken, gjin tuple skieden mei haakjes, mist in komma yn listen, spesifisearje in "besykje" blok sûnder "útsein" en "úteinlik", mei help fan "= " ynstee fan "= =" yn fergeliking, spesifisearje *-ekspresjes yn f-strings. Dêrneist soarget it derfoar dat de hiele problematyske útdrukking wurdt markearre, net allinnich it begjin, en mear eksplisite ynformaasje oer de kontekst fan flaters ferbûn mei ferkearde ynspringen. >>> def foo(): ... if lel: ... x = 2 File " ", rigel 3 x = 2 ^ IndentationError: ferwachte in ynspringende blok nei 'if' statement yn rigel 2

    By flaters dy't feroarsake binne troch typfouten yn 'e nammen fan attributen en fariabelenammen yn in funksje, wurdt in oanbefelling mei de juste namme útfierd. >>>collections.namedtoplo Traceback (lêste oprop lêste): Triem « ", rigel 1, yn AttributeError: module 'kolleksjes' hat gjin attribút 'namedtoplo'. Bedoelde jo: namedtuple?

  • Foar debuggen ark en profilers wurde trace eveneminten foarsjoen fan de krekte line nûmers fan útfierd koade.
  • Sys.flags.warn_default_encoding ynstelling tafoege foar in werjaan fan in warskôging oer potinsjele flaters ferbûn mei TextIOWrapper en iepen () ferwurkjen UTF-8 kodearre triemmen sûnder eksplisyt spesifisearje de 'encoding =»utf-8″' opsje (ASCII kodearring wurdt brûkt standert). De nije release biedt ek de mooglikheid om in 'encoding="locale"'wearde op te jaan om de kodearring yn te stellen op basis fan 'e hjoeddeistige locale.
  • In nije operator is tafoege oan de typmodule, dy't ark biedt foar it opjaan fan typeannotaasjes, wêrtroch it gebrûk fan 'e syntaksis "X | Y" om ien fan 'e typen te selektearjen (X-type of Y-type). def square(nûmer: int | float) -> int | float: return number ** 2 is lykweardich oan it earder stipe konstruksje: def square(nûmer: Union[int, float]) -> Union[int, float]: return number ** 2
  • De Concatenate-operator en de ParamSpec-fariabele binne tafoege oan de typmodule, wêrtroch jo ekstra ynformaasje kinne trochjaan foar statyske typekontrôle by it brûken fan Callable. De typmodule foeget ek spesjale wearden TypeGuard ta om typebeskermingsfunksjes te annotearjen en TypeAlias ​​om eksplisyt in type alias te definiearjen. StrCache: TypeAlias ​​​​= 'Cache[str]' # in type alias
  • De zip() funksje ymplemintearret in opsjonele "string" flagge, dy't, as oantsjutte, kontrolearret oft de arguminten dy't iterearre binne deselde lingte. >>> 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 (meast resinte oprop lêste ): … ValueError: zip() argumint 2 is langer dan argumint 1
  • Nije ynboude funksjes aiter () en anext () wurde foarsteld mei de útfiering fan asynchronous analogen oan de funksjes iter () en folgjende ().
  • It wurk fan de str (), bytes () en bytearray () constructors by it wurkjen mei lytse objekten is fersneld troch 30-40%.
  • Fermindere it oantal ymportearjen operaasjes yn de runpy module. It kommando "python3 -m module_name" rint no gemiddeld 1.4 kear rapper troch de fermindering fan ymporteare modules fan 69 nei 51.
  • De LOAD_ATTR-ynstruksje brûkt in caching-meganisme foar yndividuele opcodes, dy't it mooglik makke om wurk mei reguliere attributen te fersnellen mei maksimaal 36%, en mei slots mei maksimaal 44%.
  • By it bouwen fan Python mei de opsje "--enable-optimizations" is de "-fno-semantyske-ynterposysje" modus no ynskeakele, wêrtroch't de tolk mei maksimaal 30% fersnelle kin yn ferliking mei it bouwen mei de "--enable-shared" " opsje.
  • De hashlib- en ssl-modules hawwe stipe tafoege foar OpenSSL 3.0.0 en stoppe mei it stypjen fan OpenSSL-ferzjes âlder dan 1.1.1.
  • De âlde parser is fuorthelle, dy't yn 'e foarige tûke ferfongen waard troch de PEG (Parsing Expression Grammar) parser. De formattermodule is fuorthelle. De loopparameter is fuortsmiten fan de asyncio API. Metoaden dy't earder ôfkard binne binne fuortsmiten. De Py_UNICODE_str*-funksjes dy't Py_UNICODE*-strings manipulearje binne fuortsmiten.
  • De distutils-module is ôfret en is pland foar ferwidering yn Python 3.12. Ynstee fan distutils is it oan te rieden om de opset-ark, ferpakking, platfoarm, shutil, subproses en sysconfig-modules te brûken. De wstr-struktuer yn PyUnicodeObject is ôfret en pland foar ferwidering.

Boarne: opennet.ru

Add a comment