Programmeerimiskeele Python 3.11 väljaandmine

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

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster