A Python programozási nyelv 3.10 megjelenése.

Egy év fejlesztés után jelentős kiadás érkezett a Python 3.10 programozási nyelvhez. Az új ág másfél évig lesz támogatva, amely után még három és fél éven át kap javításokat a sérülékenységek kiküszöbölésére.

Eközben megkezdődött a Python 3.11 ág alfa-tesztelése (a friss fejlesztési ütemterv szerint az új ág munkája öt hónappal a korábbi ág kiadása előtt kezdődik, és a következő kiadás pillanatára eléri az alfa-tesztelési szakaszt). A Python 3.11 ág hét hónapon át alfa-kiadások fázisában lesz, amely idő alatt új lehetőségek kerülnek bevezetésre, és hibajavítások történnek. Ezt követően három hónapon át bétaverziók tesztelése folyik, amely során új lehetőségek bevezetése tilos, és minden figyelem a hibák javítására összpontosul. Az utolsó két hónapban a kiadásjelölt fázisban lesz, amely alatt végső stabilizálás történik.

A Python 3.10 újításaiból:

  • Megvalósultak a "match" és "case" operátorok a mintázatillesztéshez, amelyek javítják a kód olvashatóságát, leegyszerűsítik az önkényes Python-objektumok illesztését, és növelik a kód megbízhatóságát a kiterjesztett statikus típusellenőrzés lehetősége révén. A megvalósítás nagymértékben hasonlít a Scala, Rust és F# nyelvek által biztosított "match" operátorhoz, amely egy 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 az objektumok, a tuple-ök, a listák és az tetszőleges sorozatok kibővítésére a változók meglévő értékek szerinti hozzárendeléséhez. Támogatott a beágyazott sablonok meghatározása, további "if" feltételek használata a sablonban, maszkok alkalmazása ("[x, y, *rest]"), kulcs-érték párok térképezése (pl. {"sávszélesség": b, "késleltetés": l} a "sávszélesség" és a "késleltetés" értékek kinyerésére a szótárból), alapsablonok kinyerése (a "=:" operátorral), valamint elnevezett konstansok használata a sablonban. Az osztályokban a "__match__()" metódussal állítható a megfelelőség viselkedé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("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 az átlón") RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print("Látok pirosat!") case GREEN: print("A fű zöld") case BLUE: print("Szomorú vagyok :( ")

  • Lehetővé vált a kerek zárójelek használata a with operátorban, hogy a kontextuskezelők gyűjteményének meghatározása több sorra is elosztható legyen. A csoport utolsó kontextuskezelője után a vessző is megengedett: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): …
  • Javult a kódhibák helyszínéről való tájékoztatás a zárójel és szöveges literálokban található idézőjelek felemelése kapcsán. Például, ha egy zárójel nincs lezárva, a szintaktikai hibáról való tájékoztatás helyett a kijelző kiemeli a megnyitott 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

    Különleges szintaxis hibaüzenetek kerültek hozzáadásra: hiányzó ':' jel a blokk előtt és a szótárakban, a tuple-k szögletes zárójelezésének elmulasztása, vessző hiánya a listákban, a 'try' blokk megadása 'except' és 'finally' nélkül, '=' használata '==' helyett a összehasonlításokban, *-kifejezések megadása f-stringekben. Ezen kívül a problémás kifejezés teljes kiemelését, nem csak a kezdetét, és a hibákkal kapcsolatos kontextus világosabb tájékoztatását is biztosítani kellett, amelyek helytelen behúzással kapcsolatosak. >>> def foo(): … if lel: … x = 2 File '', line 3 x = 2 ^ IndentationError: várt egy behúzott blokk az 'if' utasítás után a 2. sorban

    A változónevek és attribútumnevek elgépeléséből eredő hibák esetén megjelenik a helyes név javaslata. >>> collections.namedtoplo Traceback (most recent call last): File '', line 1, in AttributeError: a 'collections' modulnak nincs 'namedtoplo' attribútuma. Gondoltad, hogy: namedtuple?

  • A hibakereső eszközök és profilozók számára most már a végrehajtott kód pontos sorainak megadását biztosítja a nyomkövetési eseményekben.
  • Hozzáadva a sys.flags.warn_default_encoding beállítás, amely a UTF-8 kódolású TextIOWrapper és open() fájlokkal kapcsolatos potenciális hibákra figyelmeztet. Az alapértelmezett ASCII kódolás helyett lehetőség van az 'encoding="locale"' opció megadására, amely az aktuális lokalitás alapján állítja be a kódolást.
  • A typing modulhoz hozzáadottak egy új operátort, amely lehetővé teszi az 'X | Y' szintaxis használatát a típusok közötti választáshoz (X típus vagy Y típus). def square(number: int | float) -> int | float: return number ** 2 az korábban támogatott szerkezetnek felel meg: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • A typing modulhoz hozzáadották a Concatenate operátort és a ParamSpec változót, amelyek lehetővé teszik a statikus típusellenőrzéshez szükséges további információk átadását a Callable használatakor. A typing modulhoz speciális TypeGuard értékek is hozzáadva a típusvédelmi függvények annotálásához, és TypeAlias, amely a típusalias explicit meghatározására szolgál. StrCache: TypeAlias = 'Cache[str]' # egy típus alias
  • A zip() függvényhez egy opcionális "strict" jelző lett bevezetve, amelynek megadása esetén ellenőrzés történik a megadott argumentumok azonos hosszára. >>> 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 (legutolsó hívás utolsó lényege): ... ValueError: zip() második argumentum hosszabb az elsőnél
  • Új beépített aiter() és anext() funkciókat javasoltak az iter() és next() aszinkron megfelelőihez.
  • A str(), bytes() és bytearray() konstruktőrök teljesítménye 30-40%-kal nőtt a kis objektumokkal való munka során.
  • Csökkent az importálási műveletek száma a runpy modulban. A "python3 -m modul_neve" parancs most átlagosan 1.4-szer gyorsabban fut, mivel az importálandó modulok száma 69-re csökkent 51-re.
  • A LOAD_ATTR utasításban egyes opkódok gyorsítótár-mechanizmusa került bevezetésre, amely lehetővé tette a hagyományos attribútumokkal való munka 36%-os, míg a slotokkal való munka 44%-os gyorsítását.
  • A Python "--enable-optimizations" opcióval való fordításakor most aktiválódik a "-fno-semantic-interposition" üzemmód, amely lehetővé teszi az interpreter 30%-kal gyorsabb futását a "--enable-shared" opcióval való fordításhoz képest.
  • A hashlib és ssl modulokban támogatás került bevezetésre az OpenSSL 3.0.0 verziójához, míg a 1.1.1 verzió előtti OpenSSL verziók támogatása megszűnt.
  • Az öreg parser eltávolításra került, amelyet a múltbeli verzióban a PEG (Parsing Expression Grammar) parser váltott fel. Az formatter modul eltávolításra került. Az asyncio API-ból eltávolították a loop paramétert. Eltávolították azokat a módszereket, amelyeket korábban elavultnak nyilvánítottak. Eltávolították a Py_UNICODE_str* függvényeket, amelyek a Py_UNICODE* karakterláncokkal dolgoztak.
  • A distutils modult elavultnak nyilvánították, amely a Python 3.12 verziójában eltávolításra kerül. A distutils helyett a setuptools, packaging, platform, shutil, subprocess és sysconfig modulok használatát javasolják. Az wstr struktúra is elavultnak nyilvánították és eltávolításra került 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