Pas një viti zhvillimi, është publikuar një version i rëndësishëm i gjuhës së programimit Python 3.11. Dega e re do të mbështetet për një vit e gjysmë, pas së cilës për edhe tre vjet e gjysmë do të publikohen përditësime me korrigjime të cenueshmërive.
Njëkohësisht ka nisur edhe testimi alfa i degës Python 3.12 (sipas ciklit të ri të zhvillimit, puna për degën e re fillon pesë muaj përpara publikimit të degës paraardhëse dhe deri në momentin e publikimit të radhës arrin fazën e testimit alfa). Dega Python 3.12 do të qëndrojë në fazën e versioneve alfa për shtatë muaj, gjatë të cilëve do të shtohen funksione të reja dhe do të korrigjohen gabimet. Më pas, për tre muaj do të zhvillohet testimi i versioneve beta, gjatë të cilit shtimi i funksioneve të reja do të ndalohet dhe i gjithë fokusi do të përqendrohet te korrigjimi i gabimeve. Dy muajt e fundit para publikimit, dega do të jetë në fazën release candidate, ku do të kryhet stabilizimi përfundimtar.
Ndër risitë e shtuara në Python 3.11:
- ĂshtĂ« bĂ«rĂ« njĂ« punĂ« e konsiderueshme pĂ«r optimizimin e performancĂ«s. NĂ« degĂ«n e re janĂ« pĂ«rfshirĂ« ndryshime qĂ« lidhen me pĂ«rshpejtimin dhe inline-zgjerimin e thirrjeve tĂ« funksioneve, pĂ«rdorimin e interpretuesve tĂ« shpejtĂ« pĂ«r operacionet tipike (x+x, x*x, x-x, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), si edhe optimizime tĂ« pĂ«rgatitura nga projektet Cinder dhe HotPy. NĂ« varĂ«si tĂ« llojit tĂ« ngarkesĂ«s, Ă«shtĂ« vĂ«rejtur njĂ« rritje e shpejtĂ«sisĂ« sĂ« ekzekutimit tĂ« kodit prej 10-60%. Mesatarisht, performanca gjatĂ« kalimit tĂ« paketĂ«s sĂ« testeve pyperformance Ă«shtĂ« rritur me 25%.
ĂshtĂ« ripunuar mekanizmi i cache-it tĂ« bytecode-it, gjĂ« qĂ« ka bĂ«rĂ« tĂ« mundur uljen e kohĂ«s sĂ« nisjes sĂ« interpretuesit me 10-15%. Objektet e kodit dhe bytecode tani vendosen nĂ« mĂ«nyrĂ« statike nga interpretuesi, çka ka lejuar heqjen e fazave tĂ« demarshalling tĂ« bytecode-it tĂ« marrĂ« nga cache-i dhe tĂ« transformimit tĂ« objekteve tĂ« kodit pĂ«r vendosje nĂ« memorien dinamike.
- Gjatë shfaqjes së traceback-ut në mesazhet diagnostikuese, tani paraqitet edhe informacioni për shprehjen që shkaktoi gabimin (më parë theksohej vetëm rreshti, pa u sqaruar cila pjesë e tij ishte shkaku i gabimit). Informacion më i detajuar për traceback-un mund të merret edhe përmes API-së dhe të përdoret për të lidhur instruksione të veçanta të bytecode-it me pozicionin përkatës në kodin burimor, duke përdorur metodën codeobject.co_positions() ose funksionin e C API-së PyCode_Addr2Location(). Ky ndryshim e thjeshton ndjeshëm debugimin e problemeve që lidhen me objekte të folezuara të fjalorëve, thirrje të shumta funksionesh dhe shprehje aritmetike komplekse. Traceback (most recent call last): File «calculation.py», line 54, in result = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
- ĂshtĂ« shtuar mbĂ«shtetja pĂ«r grupet e pĂ«rjashtimeve, tĂ« cilat i japin programit mundĂ«sinĂ« tĂ« gjenerojĂ« dhe tĂ« pĂ«rpunojĂ« njĂ«kohĂ«sisht disa pĂ«rjashtime tĂ« ndryshme. PĂ«r grupimin e disa pĂ«rjashtimeve dhe thirrjen e tyre tĂ« pĂ«rbashkĂ«t janĂ« prezantuar llojet e reja tĂ« pĂ«rjashtimeve ExceptionGroup dhe BaseExceptionGroup, ndĂ«rsa pĂ«r tĂ« veçuar pĂ«rjashtime individuale nga grupi Ă«shtĂ« shtuar shprehja «except*».
- Në klasën BaseException është shtuar metoda add_note(), e cila lejon bashkëngjitjen e një shënimi tekstual te përjashtimi, për shembull për të shtuar informacion kontekstual që nuk ishte i disponueshëm në momentin e gjenerimit të përjashtimit.
- ĂshtĂ« shtuar tipi special Self, i cili pĂ«rfaqĂ«son klasĂ«n aktuale tĂ« mbyllur. Self mund tĂ« pĂ«rdoret pĂ«r tĂ« anotuar metoda qĂ« kthejnĂ« njĂ« instancĂ« tĂ« klasĂ«s sĂ« tyre, nĂ« njĂ« mĂ«nyrĂ« mĂ« tĂ« thjeshtĂ« sesa kur pĂ«rdoret TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
- ĂshtĂ« shtuar tipi i veçantĂ« LiteralString, i cili mund tĂ« pĂ«rfshijĂ« vetĂ«m literale vargjesh tĂ« pĂ«rputhshme me tipin LiteralString (pra, vargje tĂ« thjeshta dhe vargje me tipin LiteralString, por jo vargje arbitrare dhe as vargje tĂ« kombinuara me tipin str). Tipi LiteralString mund tĂ« pĂ«rdoret pĂ«r tĂ« kufizuar kalimin e argumenteve tĂ« tipit string te funksionet, ku zĂ«vendĂ«simi arbitrar i pjesĂ«ve tĂ« vargut mund tĂ« çojĂ« nĂ« cenueshmĂ«ri, pĂ«r shembull gjatĂ« formimit tĂ« vargjeve pĂ«r kĂ«rkesa SQL ose komanda shell. def run_query(sql: LiteralString) -> ⊠⊠def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(«SELECT * FROM students») # nĂ« rregull run_query(literal_string) # nĂ« rregull run_query(«SELECT * FROM » + literal_string) # nĂ« rregull run_query(arbitrary_string) # Gabim run_query( # Gabim f»SELECT * FROM students WHERE name = {arbitrary_string}» )
- ĂshtĂ« shtuar tipi TypeVarTuple, i cili lejon pĂ«rdorimin e gjenerikĂ«ve variativĂ«, qĂ« ndryshe nga TypeVar mbulojnĂ« jo njĂ« tip tĂ« vetĂ«m, por njĂ« numĂ«r arbitrar tipesh.
- Në bibliotekën standarde është përfshirë moduli tomllib me funksione për analizimin e formatit TOML.
- ĂshtĂ« ofruar mundĂ«sia pĂ«r tĂ« shĂ«nuar elemente tĂ« veçanta tĂ« fjalorĂ«ve tĂ« tipizuar (TypedDict) me etiketat Required dhe NotRequired pĂ«r tĂ« pĂ«rcaktuar fushat e detyrueshme dhe jo tĂ« detyrueshme (si parazgjedhje, tĂ« gjitha fushat e deklaruara janĂ« tĂ« detyrueshme pĂ«r t'u plotĂ«suar, nĂ«se parametri total nuk vendoset nĂ« vlerĂ«n False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {«title»: «Black Panther», «year»: 2018} # NĂ« rregull m2: Movie = {«title»: «Star Wars»} # NĂ« rregull (fusha year Ă«shtĂ« opsionale) m3: Movie = {«year»: 2022} # Gabim, fusha e detyrueshme title nuk Ă«shtĂ« plotĂ«suar)
- NĂ« modulin asyncio Ă«shtĂ« shtuar klasa TaskGroup me implementimin e njĂ« menaxheri asinkron tĂ« kontekstit, i cili pret pĂ«rfundimin e njĂ« grupi detyrash. Shtimi i detyrave nĂ« grup kryhet me metodĂ«n create_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(âŠ)) task2 = tg.create_task(another_coro(âŠ)) print(«Both tasks have completed now.»)
- ĂshtĂ« shtuar dekoratori pĂ«r klasa, metoda dhe funksione @dataclass_transform, me pĂ«rcaktimin e tĂ« cilit sistemi i kontrollit statik tĂ« tipeve e trajton objektin njĂ«soj si nĂ« rastin e pĂ«rdorimit tĂ« dekoratorit @dataclasses.dataclass. NĂ« shembullin mĂ« poshtĂ«, gjatĂ« kontrollit tĂ« tipeve klasa CustomerModel do tĂ« pĂ«rpunohet nĂ« mĂ«nyrĂ« analoge me njĂ« klasĂ« me dekoratorin @dataclasses.dataclass, pra si njĂ« klasĂ« qĂ« ka metodĂ«n __init__, e cila pranon variablat id dhe name. @dataclass_transform() class ModelBase: ⊠class CustomerModel(ModelBase): id: int name: str
- NĂ« shprehjet e rregullta Ă«shtĂ« shtuar mundĂ«sia pĂ«r tĂ« pĂ«rdorur grupimin atomik ((?>âŠ)) dhe kuantifikatorĂ«t possessive (*+, ++, ?+, {m,n}+).
- ĂshtĂ« shtuar opsioni i rreshtit tĂ« komandĂ«s «-P» dhe ndryshorja e mjedisit PYTHONSAFEPATH pĂ«r tĂ« çaktivizuar shtimin automatik nĂ« sys.path tĂ« shtigjeve tĂ« skedarĂ«ve potencialisht tĂ« pasigurt.
- ĂshtĂ« pĂ«rmirĂ«suar ndjeshĂ«m vegla py.exe pĂ«r platformĂ«n Windows, ku Ă«shtĂ« zbatuar mbĂ«shtetja pĂ«r sintaksĂ«n «-V:/» pĂ«rveç «-.».
- Shumë makro në C API janë shndërruar në funksione të zakonshme ose statike inline.
- Modulet uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev dhe sunau janë shpallur të vjetruara dhe do të hiqen në versionin Python 3.13. Janë hequr funksionet PyUnicode_Encode*.
Burimi: opennet.ru
