A Python programozási nyelv 3.10 megjelenése.

Egy éves fejlesztés után bemutatásra került a Python 3.10 programozási nyelv jelentős kiadása. Az új ág másfél évig lesz támogatva, ezt követően még három és fél évig kap javításokat a sebezhetőségek csökkentése érdekében.

Ezzel egyidejűleg megkezdődött a Python 3.11 ág alfa-tesztelése (az új fejlesztési ütemterv szerint a munka az új ágon öt hónappal a korábbi ág kiadása előtt indul, és a következő kiadásra elérheti az alfa-tesztelési állapotot). A Python 3.11 ág hét hónapig alfa-kiadás alatt áll, ezen időszak alatt új lehetőségek kerülnek hozzáadásra és hibák javítására kerül sor. Ezt követően három hónapig bétatesztelés zajlik, amely alatt az új lehetőségek hozzáadása tilos lesz, és minden figyelem a hibák javítására összpontosul. Az utolsó két hónapban a kiadásra jelölt állapotban tartózkodik az ág, amely alatt végrehajtják a végső stabilizációt.

A Python 3.10 újdonságai közé tartoznak:

  • Megvalósították a "match" és "case" operátorokat, amelyek lehetővé teszik a kód olvashatóságának javítását, a véletlenszerű Python-objektumokkal való egyszerűbb mintázatillesztést, és a kód megbízhatóságának növelését a kiterjesztett statikus típuskontroll lehetőségeivel. A megvalósítás sokban hasonlít a Scala, Rust és F# nyelvekben megtalálható "match" operátorhoz, amely az adott kifejezés végrehajtásának eredményét hasonlítja össze a "case" operátor alapú blokkokban felsorolt mintákkal.

    def http_error(status): match status: case 400: return "Bad request" case 401|403|404: return "Not allowed" case 418: return "I’m a teapot" case _: return "Something else"

    Lehetőség van objektumok, tuple-ök, listák és tetszőleges sorozatok kibővítésére a meglévő értékek alapján változók kötésére. Megengedett a beágyazott sablonok definiálása, plusz feltételek „if” használata a sablonban, maszkok alkalmazása („[x, y, *rest]”), kulcs/érték párok leképezése (például {„sávszélesség”: b, „késleltetés”: l} a „sávszélesség” és a „késleltetés” értékek kinyeréséhez a szótárból), alsablonok kinyerése (a „:=” operátor), névvel ellátott állandók használata a sablonban. Osztályok esetén a „__match__()” metódussal szabályozható a párhuzamok kezelése.

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print(„Eredet”) case Point(0, y): print(f„Y={y}”) case Point(x, 0): print(f„X={x}”) case Point(): print(„Valahol máshol”) case _: print(„Nem egy pont”) match point: case Point(x, y) if x == y: print(f„Y=X at {x}”) case Point(x, y): print(f„Nem a diagonális vonalon”) RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print(„Látom a pirosat!”) case GREEN: print(„A fű zöld”) case BLUE: print(„Szomorkás vagyok :(“)

  • Lehetőség biztosított a zárójelek használatára a with operátorban a kontextuskezelők gyűjteményének több sorra bontásához. Beleértve, hogy az utolsó kontextuskezelő után is megengedett a vessző: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): …
  • Javult a kód hibáinak helyéről szóló tájékoztatás a lezáratlan kapcsos zárójelek és string literálokban használt idézőjelek esetén. Például, ha egy kapcsos zárójel nincs lezárva, ahelyett, hogy a következő szerkezetben szintaxis hibáról tájékoztatna, a mutató most kiemeli a nyitó kapcsos zárójelet, és tájékoztat a záró blokk hiányáról. File „example.py”, line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: ‘{‘ was never closed

    További speciális szintaktikai hibaüzenetek kerültek hozzáadásra: hiányzó «:» jel a blokkok előtt és a szótárakban, a tuple zárójelezésének elmulasztása, hiányzó vesszők a listákban, «try» blokk megadása «except» és «finally» nélkül, a «=» használata a «==» helyett az összehasonlításokban, *-kifejezések megadása f-stringekben. Ezenkívül biztosítva van a problémás kifejezés teljes kiemelése, nem csupán a kezdete, és egyértelműbb tájékoztatás a helytelen behúzásokkal kapcsolatos hibák kontextusáról. >>> def foo(): … if lel: … x = 2 File «<stdin>», line 3 x = 2 ^ IndentationError: várt egy behúzott blokk az ‘if’ utasítás után a 2. sorban.

    A változók és attribútumok nevének elgépeléséből adódó hibák esetén javaslatot ad a megfelelő név megadására. >>> collections.namedtoplo Traceback (legutolsó hívás legutolsó): File «<stdin>», line 1, in <module> AttributeError: a ‘collections’ modulnak nincs ‘namedtoplo’ attribútuma. Azt akarta mondani: namedtuple?

  • A hibakereső eszközök és profiler-ek esetében a nyomozási eseményekben a végrehajtott kód pontos sorainak megadása biztosított.
  • Hozzáadva a sys.flags.warn_default_encoding beállítás, amely figyelmeztetést ad ki a potenciális hibákról az UTF-8 kódolású TextIOWrapper és open() fájlok kezelésénél anélkül, hogy kifejezetten meghatároznánk az ‘encoding=»utf-8″’ opciót (alapértelmezés szerint ASCII kódolást használ). Az új verzióban lehetőség van ‘encoding=»locale»’ érték megadására is, amely a jelenlegi lokalizáció alapján állítja be a kódolást.
  • A typing modulhoz, amely lehetőséget biztosít a típusok annotálására, egy új operátor került hozzáadásra, amely lehetővé teszi az „X | Y” szintaxis használatát az egyik típus (X típus vagy Y típus) kiválasztására. def square(number: int | float) -> int | float: return number ** 2 egyenértékű a korábban támogatott konstrukcióval: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • A typing modulhoz hozzáadva a Concatenate operátor és a ParamSpec változó, amelyek lehetővé teszik a további információ átadását a statikus típusellenőrzéshez a Callable használatakor. A typing modulhoz speciális TypeGuard értékek is kerültek, amelyek a típusvédelem annotálására szolgálnak, valamint a TypeAlias a típusaliasok kifejezett meghatározására. StrCache: TypeAlias = ‘Cache[str]’ # egy típus alias
  • A zip() funkcióban megvalósították a "strict" opciót, amellyel ellenőrizhető az átadott argumentumok azonos hossza. >>> 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() második argumentum hosszabb, mint az első
  • Új beépített aszinkron függvények, a aiter() és anext() kerültek bemutatásra, amelyek az iter() és next() függvények aszinkron megfelelőivel valósítják meg a funkciókat.
  • A str(), bytes() és bytearray() konstruktőrök munkája 30-40%-kal felgyorsult apró objektumok esetén.
  • Csökkent a beimportált műveletek száma a runpy modulban. A "python3 -m modul_neve" parancs most 1.4-szer gyorsabban fut, köszönhetően az importált modulok számának csökkentésének 69-ről 51-re.
  • A LOAD_ATTR utasításban használatba került egy egyedi opcode-ok gyorsítótárazási mechanizmusa, amely lehetővé tette a szokásos attribútumokkal való munka 36%-os, míg a slot-okkal végzett munka 44%-os felgyorsítását.
  • A Python összeszerelésekor az "—enable-optimizations" opcióval most bekapcsolják a "-fno-semantic-interposition" módot, amely lehetővé teszi az értelemszerinti osztás nélküli összeállításhoz képest az értelmező munkájának akár 30%-kal történő felgyorsítását.
  • A hashlib és a ssl módulokban támogatást adtak az OpenSSL 3.0.0-hoz, míg a 1.1.1-nél régebbi OpenSSL verziók támogatása megszűnt.
  • Eltávolították a régi elemzőt, amelyet a múltbeli ágon a PEG (Parsing Expression Grammar) elemző váltott fel. El lett távolítva a formatter modul. Az asyncio API-jából eltávolították a loop paramétert. Eltávolították a korábban elavultnak nyilvánított metódusokat. Eltávolították a Py_UNICODE_str* függvényeket, amelyek a Py_UNICODE* karakterláncokkal manipuláltak.
  • Elavultnak nyilvánították a distutils modult, amely a Python 3.12-ben tervezett eltávolításra. A distutils helyett ajánlott a setuptools, packaging, platform, shutil, subprocess és sysconfig modulok használata. Az elavult és eltávolításra tervezett struktúra közé került a wstr a PyUnicodeObject-ban.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster