PĂ€rast aasta arendamist on vĂ€lja antud oluline Python 3.11 programmeerimiskeele versioon. Uut haru toetatakse ĂŒheksa kuu jooksul ning sellele jĂ€rgneb kolm ja pool aastat turvavigade paranduste tegemiseks.
Samas algas Python 3.12 haru alfa-testimine (vastavalt uuele arenduskavale algab töö uue haru kallal viis kuud enne eelmine haru vÀljalaskmist ja jÔuab alfa-testimise faasi eeloleva vÀljaande ajaks). Python 3.12 haru jÀÀb seitsmeks kuuks alfa-versioonide faasi, mille jooksul lisatakse uusi funktsioone ja parandatakse vigu. SeejÀrel kestab kolme kuu jooksul beetatestimise periood, mille jooksul uusi funktsioone ei tohi lisada ning keskendutakse vigade parandamisele. Viimased kaks kuud enne vÀljalaskmist ollakse vÀljaande kandidaadi faasis, mis hÔlmab lÔplikku stabiliseerimist.
Python 3.11-sse on lisatud jÀrgmised uuendused:
- Tehtud on ulatuslik töö jĂ”udluse optimeerimise nimel. Uude haru on sisse viidud muudatused, mis kiirendavad ja inline-kutsuvate funktsioonide tĂ€itmist, kasutades kiireid tĂ”lgendajaid tĂŒĂŒpiliste operatsioonide jaoks (x+x, x*x, x-x, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), samuti optimeerimisi, mis on ette valmistatud projektide Cinder ja HotPy poolt. Olenevalt koormusest tĂ€heldatakse koodi tĂ€itmise kiirusetĂ”usu vahemikus 10â60%. Keskmiselt on jĂ”udlus pyperformance testkomplekti lĂ€bimisel paranenud 25% vĂ”rra.
Bytecode'i vahemĂ€lu mehhanismi on ĂŒmber töötatud, mis on vĂ”imaldanud vĂ€hendada tĂ”lgendaja kĂ€ivitamise aega 10â15%. Koodi ja bytecode'i objektid paigutatakse nĂŒĂŒd tĂ”lgendaja poolt staatiliselt, mis kĂ”rvaldab vahemĂ€lu pĂ€rast demarshalleerimise ja koodiga objektide teisendamise etapid dĂŒnaamilisse mĂ€lu paigutamiseks.
- Vigade diagnostikas sĂ”numite kuvamisel on tagatud, et kuvada teavet avaldisest, mis pĂ”hjustas vea (varem kuvatud vaid rida ilma detailideta, milline osa reast oli vea pĂ”hjuseks). Laiendatud teavet jĂ€lgimise kohta on vĂ”imalik saada ka API kaudu ning kasutada seda bytecode'i ĂŒksikute kĂ€skude vaste leidmiseks algkoodis, kasutades meetodit codeobject.co_positions() vĂ”i C API funktsiooni PyCode_Addr2Location(). See muudatus lihtsustab oluliselt probleemide debugimist, mis on seotud sĂ”nastike sisseehitatud objektide, mitme funktsiooni kutse ja keeruliste aritmeetiliste avaldistega. Traceback (viimase kutse jĂ€rgi): Failis âcalculation.pyâ, rida 54, result = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: jagamine nulliga
- Lisatud on toega erandigruppide funktsionaalsus, mis vĂ”imaldab programmil genereerida ja töödelda korraga mitmeid erinevaid erandeid. Mitme erandi rĂŒhmitamiseks ja nende samaaegseks kutseks on ette nĂ€htud uued eranditĂŒĂŒbid ExceptionGroup ja BaseExceptionGroup ning ĂŒksikute erandite rĂŒhma vĂ€ljatoomiseks on lisatud vĂ€ljend âexcept*â.
- BaseException klassile on lisatud meetod add_note(), mis vÔimaldab erandiga liita tekstilist mÀrkust, nÀiteks kontekstit teavet, mis ei ole erandi genereerimise ajal kergesti kÀttesaadav.
- Lisatud on spetsiaalne tĂŒĂŒp Self, mis esindab praegust suletud klassi. Selfi vĂ”ib kasutada oma klassi eksemplari tagastamiseks annoteerimiseks lihtsamal viisil kui TypeVar'i kasutades. class MyLock: def __enter__(self) -> Self: self.lock() return self
- Lisatud on spetsiaalne tĂŒĂŒp LiteralString, mis vĂ”ib sisaldada ainult stringi literale, mis vastavad LiteralString tĂŒĂŒbile (st alasti stringid ja LiteralString tĂŒĂŒbiga stringid, kuid mitte juhuslikud ja kombineeritud stringid str tĂŒĂŒbiga). LiteralString tĂŒĂŒpi saab kasutada stringi argumentide edastamise piiramiseks funktsioonides, mille puhul stringide osade juhuslik asendamine vĂ”ib pĂ”hjustada turvavigu, nĂ€iteks SQL-pĂ€ringute vĂ”i shell-kĂ€skude genereerimisel. def run_query(sql: LiteralString) -> ⊠⊠def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(âSELECT * FROM studentsâ) # ok run_query(literal_string) # ok run_query(âSELECT * FROM â + literal_string) # ok run_query(arbitrary_string) # Viga run_query( # Viga fâSELECT * FROM students WHERE name = {arbitrary_string}â )
- Lisatud on tĂŒĂŒp TypeVarTuple, mis vĂ”imaldab kasutada variatiivseid generikume, erinevalt TypeVar'ist, mis katab mitte ĂŒhte tĂŒĂŒpi, vaid suvalist arvutĂŒĂŒpi.
- Standardsesse teeki on lisatud tomllib moodul TOML formaadi analĂŒĂŒsi funktsioonide jaoks.
- On lisatud vĂ”imalus mÀÀrata eraldiseisvatele tĂŒĂŒbidiktide (TypedDict) elementidele Required ja NotRequired mĂ€rgid, et mÀÀratleda kohustuslikud ja mitte-kohustuslikud vĂ€ljad (vaikimisi on kĂ”ik deklareeritud vĂ€ljad kohustuslikud, kui parameeter total ei ole seatud vÀÀrtusele False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars"} # OK (vĂ€ljak, year ei ole kohustuslik) m3: Movie = {"year": 2022} # Viga, kohustuslik vĂ€ljak title ei ole tĂ€idetud)
- Modiulis asyncio on lisatud klass TaskGroup, millel on asĂŒnkroonne kontekstihaldur, mis ootab ĂŒlesannete rĂŒhma tĂ€itmist. Ălesannete lisamine gruppi toimub meetodi create_task() abil. async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(âŠ)) task2 = tg.create_task(another_coro(âŠ)) print("MĂ”lemad ĂŒlesanded on nĂŒĂŒd lĂ”pule viidud.")
- Lisatud on dekoratorite sĂŒsteem, mida kasutatakse klasside, meetodite ja funktsioonide puhul @dataclass_transform, mille mÀÀramisel tĂ”lgendab staatiline kontrollimisĂŒsteem objekti nagu oleks kasutatud dekoratorit @dataclasses.dataclass. JĂ€rgmises nĂ€ites töödeldakse klassi CustomerModel tugiĂŒlesannete kontrollmisel nagu klassi, millel on dekorator @dataclasses.dataclass, st see on omab meetodit __init__, mis lubab muutujaid id ja name. @dataclass_transform() class ModelBase: ⊠class CustomerModel(ModelBase): id: int name: str
- Regulaaravaldustes on lisatud atomaarse grupi ((?>âŠ)) kasutamise vĂ”imalus ja armukadedad (possessive) kvantifikaatorid (*+, ++, ?+, {m,n}+).
- Lisatud on kĂ€surea valik â-Pâ ja keskkonnamuutuja PYTHONSAFEPATH automaatse manustamise keelamiseks sys.path potentsiaalselt ohtlike failiteede jaoks.
- Windowsi platvormile on oluliselt tĂ€iustatud utiliiti py.exe, kus on rakendatud sĂŒntaksi â-V:<company>/<tag>â toetamine kooskĂ”las â-<major>.<minor>â.
- Paljud C API makrod on muudetud tavalisteks vÔi staatilisteks inline-funktsioonideks.
- Moodulid uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev ja sunau on kuulutatud aegunuks ning need eemaldatakse Python 3.13 vÀljalaskmisel. Funktsioonid PyUnicode_Encode* on eemaldatud.
Allikas: opennet.ru
