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
