Vydanie programovacieho jazyka Python 3.9

Po roku vývoja predstavené významné vydanie programovacieho jazyka Python 3.9. Python 3.9 sa stal prvým vydaním po prechodu projektoch na nový cyklus prípravy a správy vydaní. Nové významné vydania sa teraz budú vytvárať raz ročne, zatiaľ čo opravy budú vydávané raz za dva mesiace. Každá významná veta bude podporovaná počas rok a pol, po ktorých budú tri a pol roka vytvárané opravy na odstránenie zraniteľností.

Práca na novej vete teraz začína päť mesiacov pred vydaním ďalšej vety, t.j. súčasne s vydaním Python 3.9 začalo alfa-testovanie vetvy Python 3.10. Vetva Python 3.10 bude v štádiu alfa-vydaní počas siedmich mesiacov, počas ktorých budú pridávané nové funkcie a opravované chyby. Následne sa počas troch mesiacov uskutoční beta-testovanie, počas ktorého bude zakázané pridávanie nových funkcií a všetka pozornosť sa zameria na opravy chýb. Posledné dva mesiace pred vydaním bude vetva v štádiu kandidáta na vydanie, na ktorom sa uskutoční finálna stabilizácia.

Medzi pridaných novinky v Python 3.9:

  • V slovníkoch definovaných pomocou zabudovanej triedy dict, sa objavila podpora operátorov zlúčenia „|“ a aktualizácie „|=“, ktoré dopĺňajú metódy {**d1, **d2} a dict.update, ktoré boli predtým navrhnuté na kombinovanie slovníkov.

    >>> 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"}

  • Do zabudovanej kolekcie typov sú zahrnuté list, dict a tuple, ktoré môžu byť použité ako základné typy bez importu z modulu typing. T.j. namiesto typing.List, typing.Dict a typing.Tuple možno teraz uviesť
    jednoducho list, dict a tuple:

    def greet_all(names: list[str]) -> None:
    for name in names:
    print("Ahoj", name)

  • Poskytnuté flexibilné prostriedky na anotovanie funkcií a premenných. Na pripojenie anotácií do modulu typing bol pridaný nový typ Annotated, ktorý rozširuje existujúce typy o dodatočné metadáta, ktoré sa môžu používať pri statickej analýze alebo na optimalizácie počas behu. Pre prístup k metadátam z kódu bol do metódy typing.get_type_hints() pridaný parameter include_extras.

    charType = Annotated[int, ctype("char")]
    UnsignedShort = Annotated[int, struct2.ctype(‘H’)]

  • Zmiernené Gramatické požiadavky na dekorátory – akýkoľvek výraz vhodný na použitie v blokoch if a while, teraz môže byť použitý ako dekorátor. Zmena výrazne zlepšila čitateľnosť kódu PyQt5 a uľahčila údržbu tohto modulu:

    Bolo:
    button_0 = buttons[0]
    @button_0.clicked.connect

    Teraz môžete písať:
    @buttons[0].clicked.connect

  • V štandardnej knižnici bol pridaný modul zoneinfo, vrátane informácií z databázy časových zón IANA.

    >>> from zoneinfo import ZoneInfo
    >>> from datetime import datetime, timedelta
    >>> # Letný čas
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo(„America/Los_Angeles“))
    >>> print(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    ‘PDT’

    >>> # Štandardný čas
    >>> dt += timedelta(days=7)
    >>> print(dt)
    2020-11-07 12:00:00-08:00

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

  • Bol pridaný modul graphlib, ktorý bola implementovaná podporuje topologické triedenie grafov.
  • Navrhnuté nové metódy na odstránenie prefixov a sufixov reťazcov – str.removeprefix(prefix) a str.removesuffix(suffix). Metódy boli pridané do objektov str, bytes, bytearray a collections.UserString.

    >>> s = „FooBar“
    >>> s.removeprefix(„Foo“)
    ‘Bar’

  • Bolo aktivované nový parser PEG (Parsing Expression Grammar), ktorý nahradil parser LL(1).Použitie nového parseru umožnilo zbaviť sa niektorých „hackov“, ktoré sa používali na obídenie obmedzení v LL(1), a podstatne znížiť náklady na údržbu parseru. Z hľadiska výkonu je nový parser približne na rovnakej úrovni ako predchádzajúci, ale výrazne ho predbehne v flexibilite, čo umožňuje voľnejšie navrhovanie nových funkcií jazyka. Kód starého parseru je zatiaľ zachovaný a môže byť vrátený pomocou voľby „-X oldparser“ alebo premennej prostredia „PYTHONOLDPARSER=1“, ale bude odstránený v verzii 3.10.
  • Poskytla možnosť prístupu metód C-rozšírení k stavu modulov, v ktorých sú definované, použitím priameho dereferovania ukazovateľov namiesto vyhľadávania stavu modulu pomocou funkcie PyState_FindModule. Zmena umožňuje zvýšiť výkon modulov v C znížením alebo úplným vylúčením režijných nákladov na kontrolu stavu modulu. Na asociáciu modulu s triedou bola navrhnutá C-funkcia PyType_FromModuleAndSpec(), na získanie modulu a jeho stavu C-funkcie PyType_GetModule() a PyType_GetModuleState(), a na poskytnutie metóde prístupu k triede, v ktorej je definovaná, C-funkcia PyCMethod a flag METH_METHOD.
  • Zberateľ odpadu zbavený od blokovania kolekcií, ktoré obsahujú oživené objekty, ktoré zostávajú prístupné zvonka po spustení finalizátora.
  • Bola pridaná metóda os.pidfd_open, umožňujúci využívať subsystém jadra Linux „pidfd“ na spracovanie situácie s opätovným použitím PID (pidfd je viazaný na konkrétny proces a nemení sa, zatiaľ čo PID môže byť priradený inému procesu po dokončení aktuálneho procesu, ktorý je s týmto PID spojený).
  • Podpora špecifikácie Unicode bola aktualizovaná na verziu 13.0.0.
  • Opravená únik pamäte pri opätovnej inicializácii interpretera Python v jednom procese.
  • Bola vykonaná optimalizácia výkonu vnútorných typov range, tuple, set, frozenset, list a dict, realizovaná vďaka aplikácii protokolu rýchleho volania Vectorcall na rýchlejšie prístupy k objektom písaným v jazyku C.
  • Moduly _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time a _weakref boli prevedené na načítanie s inicializáciou v niekoľkých fázach.
  • Moduly štandardnej knižnice audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios a zlib boli prevedené na používanie obmedzeného stabilného ABI, ktorý rieši problém funkčnosti zostavení rozšírených modulov pre rôzne verzie Pythonu (pri aktualizácii verzie nie je potrebné prekompilovať rozšírené moduly a moduly zostavené pre 3.9 môžu fungovať vo vetve 3.10).
  • V module asyncio bola z dôvodu potenciálnych problémov s bezpečnosťou ukončená podpora parametra reuse_address (používanie SO_REUSEADDR pre UDP v Linuxe umožňuje rôznym procesom pripojiť počúvacie sockety k UDP-portu).
  • Boli pridané nové optimalizácie, napríklad bola zvýšená výkonnosť spracovateľov signálov v multithreadových aplikáciách, zrýchlil sa modul subprocess v prostredí FreeBSD a urýchlilo sa priradenie dočasných premenných (priradenie premennej vo výraze „for y in [expr]“ teraz nie je výkonnejšie ako výrok „y = expr“). Vo všeobecnosti väčšina testov ukazujú zaznamenáva pokles výkonu v porovnaní s vetvou 3.8 (zrýchlenie sa pozoruje iba v testoch write_local a write_deque):

    Verzia Python 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Prístup k premenným a atribútom:
    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
    čítanie_classvar_z_roll 25.6 26.5 20.7 19.5 18.4 18.6
    čítanie_classvar_z_inštancie 22.8 23.5 18.8 17.1 16.4 20.1
    čítanie_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
    čítanie_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    čítanie_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    čítanie_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9

    Prístup k premennej a atribútu:
    písanie_local 8.7 9.3 5.5 5.3 4.3 4.2
    písanie_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
    písanie_global 19.7 21.2 18.0 18.0 15.8 17.2
    písanie_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    písanie_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    písanie_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Prístup k dátovej štruktúre:
    čítanie_list 24.2 24.5 20.8 20.8 19.0 21.1
    čítanie_deque 24.7 25.5 20.2 20.6 19.8 21.6
    čítanie_dict 24.3 25.7 22.3 23.0 21.0 22.5
    čítanie_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Prístup k písaniu dátovej štruktúry:
    písanie_list 27.1 28.5 22.5 21.6 20.0 21.6
    písanie_deque 28.7 30.1 22.7 21.8 23.5 23.2
    písanie_dict 31.4 33.3 29.3 29.2 24.7 27.8
    písanie_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Operácie na zásobníku (alebo rade):
    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

    Časovanie slučky:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Boli odstránené mnohé funkcie a metódy Python 2.7, ktoré boli predtým označené ako zastarané a v predchádzajúcom vydaní spôsobili zobrazenie varovania DeprecationWarning, vrátane metódy unescape() v html.parser.HTMLParser,
    tostring() a fromstring() v array.array, isAlive() v threading.Thread, getchildren() a getiterator() v ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() a base64.decodestring().

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster