A Python 3.9 programozási nyelv kiadása

Egy év fejlesztés után bemutatva jelentős programozási nyelv kiadás Python 3.9. A Python 3.9 lett az első kiadás a a váltásra projekt után új ciklus kiadások előkészítésére és támogatására. Az új jelentős kiadások mostantól évente fognak megjelenni, míg a javító frissítések kétévente. Minden jelentős ágat másfél évig támogatunk, amelyet további három és fél évig fognak a biztonsági hibák kijavításának érdekében karbantartani.

A munka az új ágon mostantól öt hónappal a következő ág kiadása előtt kezdődik, vagyis egyszerre a Python 3.9-es kiadással megkezdődött alpha tesztelés a Python 3.10 ágban. A Python 3.10 ág hét hónapig lesz alpha kiadási állapotban, amely idő alatt új funkciók kerülnek hozzáadásra és hibák javítása történik. Ezt követően három hónapig bétatesztelés zajlik, amely idő alatt új funkciók hozzáadása tilos, és a figyelem kizárólag a hibák javítására összpontosít. A kiadás előtti utolsó két hónapban az ág a kiadási jelöltek állapotában lesz, ahol a végső stabilizálást végzik.

A változtatások között hozzáadott újdonságok a Python 3.9-ben:

  • A beépített dict osztály segítségével definiált szótárakban megjelenik támogatást kaptak a «|» egyesítő és a «|=» frissítő operátorok, amelyek kiegészítik a {**d1, **d2} és a dict.update metódusokat, amelyek korábban a szótárak egyesítésére javasoltak.

    >>> x = {«key1»: «value1 from x», «key2»: «value2 from x»}
    >>> y = {«key2»: «value2 from y», «key3»: «value3 from y»}

    >>> x | y
    {‘key1’: ‘value1 from x’, ‘key2’: ‘value2 from y’, ‘key3’: ‘value3 from y’}

    >>> y | x
    {‘key2’: ‘value2 from x’, ‘key3’: ‘value3 from y’, ‘key1’: ‘value1 from x’}

  • A beépített típuskészlet tartalmazza a list, dict és tuple típusokat, amelyeket alapvető típusokként lehet használni anélkül, hogy importálnánk a typing modulból. Azaz a typing.List, typing.Dict és typing.Tuple helyett most megadható
    egyszerűen list, dict és tuple:

    def greet_all(names: list[str]) -> None:
    for name in names:
    print(«Hello», name)

  • Biztosítva vannak rugalmas eszközök a függvények és változók annotálásához. Az annotációk hozzárendelésére a typing modulhoz új Annotated típus került hozzáadásra, amely kiterjeszti a meglévő típusokat további metaadatokkal, amelyeket statikus elemzéshez vagy futási optimalizáláshoz lehet használni. A kódon belüli metaadatok eléréséhez a typing.get_type_hints() metódushoz új paraméter, az include_extras került bevezetésre.

    charType = Annotated[int, ctype(«char»)]
    UnsignedShort = Annotated[int, struct2.ctype('H')]

  • Enyhítve lettek A dekorátorok grammatikai követelményei - bármely kifejezés, amely megfelel az if és while blokkok használatának, most már dekorátorként is felhasználható. A változtatás jelentősen javította a PyQt5 kód olvashatóságát és egyszerűsítette a modul karbantartását:

    Régebben:
    button_0 = buttons[0]
    @button_0.clicked.connect

    Most már így lehet írni:
    @buttons[0].clicked.connect

  • A standard könyvtárban hozzáadva modul zoneinfo, amely tartalmazza az IANA időzónainformációit.

    >>> from zoneinfo import ZoneInfo
    >>> from datetime import datetime, timedelta
    >>> # Nyári időszámítás
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo('America/Los_Angeles'))
    >>> print(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Standard idő
    >>> dt += timedelta(days=7)
    >>> print(dt)
    2020-11-07 12:00:00-08:00

    >>> print(dt.tzname())
    PST

  • Új graphlib modul került bevezetésre, amelyben megvalósítva támogatás a gráfok topológiai rendezéséhez.
  • Ajánlott új módszerek a prefixek és suffixek eltávolítására — str.removeprefix(prefix) és str.removesuffix(suffix). A módszerek a str, bytes, bytearray és collections.UserString objektumokhoz lettek hozzáadva.

    >>> s = 'FooBar'
    >>> s.removeprefix('Foo')
    'Bar'

  • Használva új parser PEG (Parsing Expression Grammar), amely felváltotta az LL(1)parser használatát. Az új parser alkalmazása lehetővé tette néhány 'hack' eltávolítását, amelyeket az LL(1) korlátozások kijátszására használtak, és jelentősen csökkentette a parser karbantartásához szükséges munka mennyiségét. Teljesítmény szempontjából az új parser körülbelül azonos szinten van a korábbival, de jelentősen megelőzi azt a rugalmasság terén, amely lehetővé teszi, hogy szabadabban érezzük magunkat az új nyelvi funkciók tervezésekor. A régi parser kódja egyelőre megmaradt, és visszaállítható a '-X oldparser' kapcsolóval vagy a 'PYTHONOLDPARSER=1' környezeti változóval, de a 3.10-es kiadásban el fog kerülni.
  • A biztosítva a C-kiterjesztések módszerei hozzáférhetnek ahhoz az állapothoz, amelyben definiálva vannak, közvetlen pointerdereferálás segítségével, ahelyett, hogy a PyState_FindModule funkcióval keresnék meg a modul állapotát. A változtatás javítja a C modulok teljesítményét azáltal, hogy csökkenti vagy teljesen kizárja a modul állapotának ellenőrzésével járó költségeket. A modul és annak állapotának társítására C-funkciót, a PyType_FromModuleAndSpec()-t, a modul és az állapotának lekérdezésére a PyType_GetModule() és a PyType_GetModuleState() funkciókat, míg a módszer osztályhoz való hozzáférésének biztosítására C-funkciót és METH_METHOD flaget kínál.
  • A szemétgyűjtő már mentes a gyűjtések blokkolásából, amelyek újraélesztett objektumokat tartalmaznak, amelyek a végrehajtó elindítása után kívülről is elérhetők.
  • Hozzáadva a módszert os.pidfd_open, lehetővé téve a Linux kernel 'pidfd' alrendszerének használatát a PID (pidfd egy specifikus folyamathoz kapcsolódik és nem változik, míg a PID egy másik folyamathoz köthető a folyamat befejezése után) újrahasználatának kezelésére.
  • A Unicode specifikáció támogatása frissítve lett a 13.0.0 verzióra.
  • a memória szivárgás a Python interpreter újrainitializálása során ugyanabban a folyamatban.
  • A beépített tipikus range, tuple, set, frozenset, list és dict teljesítményoptimalizálását elvégezték, megvalósítva a C nyelven írt objektumokhoz való gyorsabb hozzáférés érdekében a Vectorcall gyors hívás protokoll alkalmazásával.
  • A _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time és _weakref modulok több szakaszos inicializálással lett átállítva a betöltésre. Több szakaszos inicializálás.
  • Az audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios és zlib standard könyvtári modulok átálltak egy korlátozott stabil ABI-ra, amely megoldja a különböző Python verziókhoz készült bővítmény modulok működési problémáját (az új verzióra való frissítéskor nem szükséges az bővítmény modulokat újraépíteni, és a 3.9-re épített modulok működni fognak a 3.10-es ágban).
  • Az asyncio modulban a biztonsági problémák miatt megszűnt a reuse_address paraméter támogatása (Linux alatt az SO_REUSEADDR használata UDP esetén lehetővé teszi, hogy különböző folyamatok hallgató socketeket kapcsoljanak UDP porthoz).
  • Új optimalizálások kerültek bevezetésre, például a jelek kezelése teljesítményének javítása több szálas alkalmazásokban, a subprocess modul sebességének növelése FreeBSD környezetben, valamint a változók közötti időátadás (a 'for y in [expr]' kifejezésben való változóhozzárendelés most már a 'y = expr' kifejezés teljesítményével vetekszik). Összességében a legtöbb teszt kimutatják teljesítménycsökkenést mutat a 3.8-as ághoz képest (gyorsulás csak a write_local és write_deque tesztekben figyelhető meg):

    Python verzió 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Változó- és attribútum olvasási hozzáférés:
    read_local 7.1 7.1 5.4 5.1 3.9 4.0
    read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
    read_global 15.5 19.0 14.3 13.6 7.6 7.7
    read_builtin 21.1 21.6 18.5 19.0 7.5 7.7
    read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
    read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
    read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
    read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9

    Változók és attribútumok írási hozzáférés:
    write_local 8.7 9.3 5.5 5.3 4.3 4.2
    write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
    write_global 19.7 21.2 18.0 18.0 15.8 17.2
    write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Adatstruktúrák olvasási hozzáférése:
    read_list 24.2 24.5 20.8 20.8 19.0 21.1
    read_deque 24.7 25.5 20.2 20.6 19.8 21.6
    read_dict 24.3 25.7 22.3 23.0 21.0 22.5
    read_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Adatstruktúrák írási hozzáférése:
    write_list 27.1 28.5 22.5 21.6 20.0 21.6
    write_deque 28.7 30.1 22.7 21.8 23.5 23.2
    write_dict 31.4 33.3 29.3 29.2 24.7 27.8
    write_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Verem (vagy sor) műveletek:
    list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
    deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
    deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5

    Időzítés ciklus:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Eltávolítva sok Python 2.7-es funkció és metódus, amelyeket korábban elavultnak jelöltek és a korábbi kiadás figyelmeztetést adott, beleértve az unescape() metódust a html.parser.HTMLParser-ben,
    tostring() és fromstring() az array.array-ban, isAlive() a threading.Thread-ben, getchildren() és getiterator() az ElementTree-ban, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() és base64.decodestring.

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