Lëshimi i gjuhës së programimit Python 3.10

Pas një viti zhvillimi, është prezentuar një version i rëndësishëm i gjuhës së programimit Python 3.10. Kjo degë do të mbështetet për një vit e gjysmë, pas së cilës do të formohen marrëveshje për të përmirësuar dobësitë për tre vite e gjysmë.

Në të njëjtën kohë, ka filluar testimi alfa i degës Python 3.11 (në përputhje me planin e ri të zhvillimit, puna për degën e re fillon pesë muaj para publikimit të degës së mëparshme dhe arrin në fazën alfa në momentin e publikimit të ardhshëm). Degë Python 3.11 do të qëndrojë në fazën e lëshimeve alfa gjatë shtatë muajve, kohë në të cilën do të shtohen mundësi të reja dhe do të korrigjohen gabimet. Pas kësaj, do të zhvillohet testimi i versioneve beta për tre muaj, gjatë të cilëve do të ndalohet shtimi i mundësive të reja dhe do të fokusohet vetëm në rregullimin e gabimeve. Dy muajt e fundit para publikimit, degë do të qëndrojë në fazën e kandidatëve për lëshim, në të cilën do të kryhet stabilizimi përfundimtar.

Ndër risitë e shtuar në Python 3.10:

  • Janë realizuar operatorët «match» dhe «case» për përputhjen me modele, të cilat përmirësojnë lexueshmërinë e kodit, thjeshtëzojnë përputhjen e objekteve të rastit në Python dhe rrisin besueshmërinë e kodit falë mundësisë për kontroll të avancuar të tipeve. Zbatimi është në shumë aspekte i ngjashëm me operatorin «match», të ofruar në gjuhët Scala, Rust dhe F#, i cili kryen krahasimin e rezultatit të ekzekutimit të shprehjes së dhënë me një listë modelet të renditura në blloqet bazuar në operatorin «case».

    def http_error(status): match status: case 400: return «Kërkesë e keqe» case 401|403|404: return «Nuk lejohet» case 418: return «Unë jam një tenxhere çaji» case _: return «Dick tjetër»

    Është e mundur të zbrazen objekte, tuple, lista dhe sekuenca të rastit për të lidhur variablat në bazë të vlerave ekzistuese. Lejohet përcaktimi i modele të thelluara, përdorimi i kushteve të mëtejshme «if» në model, përdorimi i maskave («[x, y, *rest]»), mapimi i çelësave/vlerave (p.sh., {«bandwidth»: b, «latency»: l} për nxjerrjen e vlerave «bandwidth» dhe «latency» nga një fjalor), nxjerrja e nënmodeleve (operatori «:=»), përdorimi i konstantave me emër në model. Në klasa, është e mundur të konfigurohet sjellja gjatë përputhjes përmes metodës «__match__()».

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print(«Origjina») case Point(0, y): print(f»Y={y}») case Point(x, 0): print(f»X={x}») case Point(): print(«Diku tjetër») case _: print(«Nuk është një pikë») match point: case Point(x, y) if x == y: print(f»Y=X në {x}») case Point(x, y): print(f»Nuk është në diagonale») RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print(«Shoh të kuqe!») case GREEN: print(«Bima është e gjelbër») case BLUE: print(«Po ndjej blu :(«)

  • Është ofruar mundësia e përdorimit të kllapave në operatorin with për të ndarë në disa rreshta përcaktimin e koleksioneve të menaxherëve të kontekstit. Përfshirë është e lejuar të lëshohet një presje pas menaxherit të fundit në grup: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): …
  • Është përmirësuar informimi në lidhje me vendndodhjen e gabimeve në kod, të lidhura me kllapat e mbyllura dhe citatet në literaturën string. Për shembull, në rastin e një kllape të hapur, në vend të informimit për një gabim sintaksor në strukturën e ardhshme, treguesi tani ndriçon kllapën e hapur dhe informon për mungesën e bllokut të mbyllur. File «example.py», line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: ‘{‘ nuk u mbyll kurrë

    Janë shtuar mesazhe të tjera të specializuara për gabimet sintaksore: mungesa e simbolit «:» përpara bllokut dhe në fjalorët, mos veçimi i tuple-ve me kllapa, mungesa e presjes në lista, përcaktimi i bllokut «try» pa «except» dhe «finally», përdorimi i «=» në vend të «==» në krahasime, përcaktimi i *-shprehjeve në f-strings. Për më tepër, është siguruar ndriçimi i gjithë shprehjes problematike, jo vetëm fillimi i saj, dhe informimi më të dukshëm mbi kontekstin e gabimeve të lidhura me përjashtimin e keq.

    Në gabimet e shkaktuara nga shkrimi i gabuar të emrave të atributeve dhe variablave në funksion, është ofruar një rekomandim me emrin e saktë. >>> collections.namedtoplo Traceback (most recent call last): File «<stdin>», line 1, in <module> AttributeError: module ‘collections’ nuk ka atribut ‘namedtoplo’. A e kishe parasysh: namedtuple?

  • Për mjetet e diagnostikimit dhe profileve është siguruar tregimi i numrave të saktë të rreshtave të kodit të ekzekutuar në ngjarjet e gjurmimit.
  • Shtuar cilësimi sys.flags.warn_default_encoding për të shfaqur një paralajmërim për gabime të mundshme në trajtimin e skedarëve në TextIOWrapper dhe open() në kodimin UTF-8 pa treguar në mënyrë të qartë opsionin 'encoding="utf-8"' (përdoret kodimi ASCII si parazgjedhje). Gjithashtu, në versionin e ri ofrohet mundësia për të caktuar vlerën 'encoding="locale"' për të vendosur kodimin në bazë të lokalizimit aktual.
  • Në modulën typing, e cila ofron mjete për përcaktimin e anotacioneve të tipeve, është shtuar operatori i ri, që lejon përdorimin e sintaksës 'X | Y' për të zgjedhur një nga tipelet (tipi X ose tipi Y). def square(number: int | float) -> int | float: return number ** 2 ekvivalente me konstruktin që është mbështetur më parë: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • Në modulën typing është shtuar operatori Concatenate dhe variabla ParamSpec, të cilat lejojnë kalimin e informacionit shtesë për kontrollin static të tipeve gjatë përdorimit të Callable. Në modulën typing janë shtuar gjithashtu vlera speciale TypeGuard për anotimin e funksioneve që mbrojnë tipet dhe TypeAlias për përcaktimin e qartë të pseudonimeve të tipeve. StrCache: TypeAlias = ‘Cache[str]’ # një pseudonim tipi
  • Në funksionin zip() është implementuar një flamur opsional 'strict', i cili, kur është treguar, kryen kontrollin e gjatësi të njëjtë të argumenteve të listuara. >>> 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 (most recent call last): … ValueError: zip() argument 2 is longer than argument 1
  • Janë propozuar funksione të reja të ndërthurura aiter() dhe anext() me implementimin e analogëve asinkronë të funksioneve iter() dhe next().
  • Përmirësuar me 30-40% performanca e konstruktorëve str(), bytes() dhe bytearray() kur punohet me objekte të vogla.
  • Numri i operacioneve të importit në modulën runpy është reduktuar. Komanda 'python3 -m emri_modulit' tani ekzekutohet më shpejt me një mesatare 1.4 për shkak të reduktimit të moduleve të importuara nga 69 në 51.
  • Në instruksionin LOAD_ATTR është aktivizuar mekanizmi i caching të opcode-ve të veçanta, i cili ka lejuar përshpejtimin e punës me atributet e zakonshme deri në 36%, dhe me slotet deri në 44%.
  • Kur ndërtimi i Python bëhet me opsionin '--enable-optimizations', tani aktivizohet moda '-fno-semantic-interposition', e cila lejon që, krahasuar me ndërtimin me opsionin '--enable-shared', të përshpejtojë punën e interpreterit deri në 30%.
  • Në modulët hashlib dhe ssl është shtuar mbështetje për OpenSSL 3.0.0 dhe është ndaluar mbështetja për versionet e OpenSSL më të vjetra se 1.1.1.
  • Parsers e vjetër është eliminuar, i cili është zëvendësuar nga parseri PEG (Parsing Expression Grammar) në degen e kaluar. është hequr moduli formatter. Nga API asyncio është hequr parametri loop. Janë hequr metodat që më parë ishin shpallur si të papërdorura. Janë eliminuar funksionet Py_UNICODE_str*, të cilat manipulojnë me stringjet Py_UNICODE*.
  • Moduli distutils është shpallur si i papërdorur dhe është planifikuar të hiqet në Python 3.12. Në vend të distutils rekomandohet përdorimi i moduleve setuptools, packaging, platform, shutil, subprocess dhe sysconfig. Strukturës wstr në PyUnicodeObject gjithashtu i është dhënë statusi i papërdorur dhe planifikohet të hiqet.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster