Python 3.11 programazio lengoaia kaleratzea

Urtebeteko garapenaren ondoren, Python 3.11 programazio-lengoaiaren bertsio esanguratsu bat argitaratu da. Adar berriari urtebete eta erdirako euskarria izango da, eta ondoren ahuleziak dituzten adabakiak osatuko dira beste hiru urte eta erdirako.

Aldi berean, Python 3.12 adarraren alfa probak hasi ziren (garapen egutegi berriaren arabera, adar berri baten lanak aurreko adarra kaleratu baino bost hilabete lehenago hasten dira eta hurrengo bertsioaren unean alfa probaren fasera iristen dira. ). Python 3.12 adarra zazpi hilabetez egongo da alfa bertsioetan, eta horietan ezaugarri berriak gehituko dira eta akatsak konponduko dira. Horren ostean, beta bertsioak hiru hilabetez probatuko dira, eta horietan funtzio berriak gehitzea debekatuko da eta arreta guztia jarriko da akatsak konpontzeko. Askapenaren aurreko azken bi hilabeteetan, adarra kaleratze hautagaiaren fasean egongo da, non behin betiko egonkortzea egingo den.

Python 3.11-en gehigarri berriak hauek dira:

  • Lan handia egin da errendimendua optimizatzeko. Adar berriak funtzio-deien azelerazioari eta inline-inplementari lotutako aldaketak biltzen ditu, eragiketa tipikoen interprete azkarren erabilerarekin (x+x, x*x, xx, a[i], a[i] = z, f(). arg) C(arg), o.method(), o.attr = z, *seq), baita Cinder eta HotPy proiektuek prestatutako optimizazioak ere. Karga motaren arabera, kodearen exekuzioaren abiadura % 10-60 handitzen da. Batez beste, errendimendua % 25 hazi zen pyperformance test suitea gainditzean.

    Bytecode caching mekanismoa birdiseinatu da, eta horrek interpretea abiarazteko denbora % 10-15 murriztu du. Kodea eta bytecodea duten objektuak interpretatzaileak estatikoki esleitzen ditu orain, eta, horri esker, cachetik ateratako bytecodea desmartxatzeko eta memoria dinamikoan jartzeko kodea duten objektuak bihurtzeko faseak ezabatzea ahalbidetu zuen.

  • Diagnostiko mezuetan deien arrastoak bistaratzen direnean, errorea eragin duen esamoldeari buruzko informazioa ematen da (lehen, lerroa bakarrik nabarmentzen zen lineako zein zatik eragin zuen errorea zehaztu gabe). Trazadura hedatua APIaren bidez ere lor daiteke eta bytecode instrukzioak iturburu-kodeko posizio zehatz batera mapatzeko erabil daiteke codeobject.co_positions() metodoa edo PyCode_Addr2Location() C API funtzioa erabiliz. Aldaketak asko errazten ditu hiztegi-objektu habiaratuekin, hainbat funtzio-deiekin eta adierazpen aritmetiko konplexuekin lotutako arazketa-arazoak. Traceback (azken deia azkena): "calculation.py" fitxategia, 54. lerroa, emaitza = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: zeroz zatitzea
  • Salbuespen taldeentzako euskarria gehitu da, programari hainbat salbuespen desberdin sortzeko eta aldi berean prozesatzeko gaitasuna emanez. Salbuespen mota berriak ExceptionGroup eta BaseExceptionGroup hainbat salbuespen taldekatzeko eta haien dei bateratu baterako proposatzen dira, eta "salbu*" esamoldea gehitzen da talde batetik salbuespenak bereizteko.
  • Add_note() metodoa gehitu da BaseException klasera, eta horri esker, salbuespenari testu-ohar bat eransteko, adibidez, salbuespena bota zen unean eskuragarri ez dagoen testuinguruko informazioa gehitzeko.
  • Self mota berezi bat gehitu da egungo klase pribatua irudikatzeko. Self erabil daiteke bere klasearen instantzia bat itzultzen duten metodoak TypeVar erabiliz baino modu sinpleago batean idazteko. klasea MyLock: def __enter__(self) -> Self: self.lock() return self
  • LiteralString mota berezi bat gehitu da, LiteralString motarekin bateragarriak diren kate literalak soilik sar ditzakeena (hau da, kate hutsak eta LiteralString motako kateak, baina ez str motako kate arbitrarioak edo konbinatuak). LiteralString mota erabil daiteke kateen argumentuak funtzioetara pasatzea mugatzeko, kateen zatien ordezkapen arbitrarioak ahultasunak ekar ditzakete, adibidez, SQL kontsultetarako edo shell komandoetarako kateak sortzerakoan. def run_query(sql: LiteralString) -> ... ... def deitzailea( arbitrary_string: str, query_string: LiteralString, taula_izena: LiteralString, ) -> Bat ere ez: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM " + literal_string) # ok run_query (arbitrary_string) # Error run_query( # Error f"SELECT * FROM students WHERE name = {arbitrary_string}" )
  • TypeVarTuple mota gehitu da, eta horrek generiko aldagaiak erabiltzeko aukera ematen du, TypeVar ez bezala, mota bakarra ez, mota kopuru arbitrarioa baizik.
  • Liburutegi estandarrak tomllib modulua barne hartzen du TOML formatua analizatzeko funtzioekin.
  • Idatzitako hiztegietako (TypedDict) elementu indibidualak Obligaziozko eta NotRequired markekin markatzeko aukera ematen da beharrezko eta aukerako eremuak zehazteko (lehenespenez, deklaratutako eremu guztiak beharrezkoak dira parametro osoa False gisa ezartzen ez bada). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # Ados (urtearen eremua aukerakoa da) m3: Movie = {"year": 2022} # Errorea, beharrezko tituluaren eremua ez da bete)
  • TaskGroup klasea asyncio moduluari gehitu zaio ataza taldea amaitu arte itxaroten duen testuinguru-kudeatzaile asinkrono baten ezarpenarekin. Talde bati atazak gehitzea create_task() metodoa erabiliz egiten da. async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(…)) task2 = tg.create_task(beste_coro(…)) print("Bi zereginak amaitu dira orain.")
  • @dataclass_transform klase, metodo eta funtzio dekoratzailea gehitu da, zehazten denean, mota estatikoko egiaztatzaileak @dataclasses.dataclass dekoratzailea erabiliko balu bezala tratatzen du objektua. Beheko adibidean, CustomerModel klasea @dataclasses.dataclass dekoratzailearekin klase bat bezala egiaztatuko da, hau da. id eta izena aldagaiak ahalbidetzen dituen __init__ metodo bat izatea bezala. @dataclass_transform() klasea ModelBase: … klasea CustomerModel (ModelBase): id: int izena: str
  • Adierazpen erregularretan taldekatze atomikoa ((?>…)) eta zenbatzaile jeloskor (posesiboak) (*+, ++, ?+, {m,n}+) erabiltzeko gaitasuna gehitu da.
  • Gehitu dira "-P" komando-lerroko aukera eta PYTHONSAFEPATH ingurune-aldagaia sys.path-era seguru ez daitezkeen fitxategi-bideen eranskin automatikoa desgaitzeko.
  • Windows plataformarako py.exe utilitatea nabarmen hobetu da, orain "-V:" sintaxia onartzen duena. / "ez gain"- . ".
  • C API-ko makro asko lineako funtzio normal edo estatikoetara bihurtu dira.
  • Uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev eta sunau moduluak zaharkituta geratu dira eta Python-en kenduko dira 3.13 oharra. PyUnicode_Encode* funtzioak kendu ditu.

Iturria: opennet.ru

Gehitu iruzkin berria