A Python 3.9 programozási nyelv kiadása

Egy év fejlesztés után bemutatott jelentős programnyelvi kiadás Python 3.9. A Python 3.9 volt az első kiadás után átmenet projekt tovább új ciklus kiadások előkészítése és támogatása. Az új főbb kiadások mostantól évente egyszer, a javító frissítések pedig kéthavonta jelennek meg. Minden jelentősebb ág másfél évig lesz támogatva, majd további három és fél évet fejlesztenek rá a sérülékenységek javítására.

Az új fiók munkálatai most öt hónappal a következő fiók megjelenése előtt kezdődnek, azaz. egybeesik a Python 3.9 kiadásával kezdődött a Python 3.10 ág alfa tesztelése. A Python 3.10 ága hét hónapig lesz alfa kiadásban, ezalatt új funkciókat adnak hozzá, és javítják a hibákat. Ezt követően három hónapig tesztelik a béta verziókat, ezalatt tilos új funkciók hozzáadása, és minden figyelmet a hibák kijavítására fordítanak. A megjelenés előtti utolsó két hónapban az ág a kiadásjelölt szakaszban lesz, és ekkor kerül sor a végső stabilizálásra.

Között tette hozzá innovációk Python 3.9-ben:

  • A beépített diktatúrával definiált szótárakban, megjelent "|" összevonási operátorok támogatása és "|=" frissítések, amelyek kiegészítik a szótárak egyesítésére korábban javasolt {**d1, **d2} és dict.update metódusokat.

    >>> x = {"kulcs1": "érték1 x-ből", "kulcs2": "érték2 x-ből"}
    >>> y = {"kulcs2": "érték2 y-ból", "kulcs3": "érték3 y-ból"}

    >>> x | y
    {'kulcs1': 'érték1 x-ből', 'kulcs2': 'érték2 y-ból', 'kulcs3': 'érték3 y-ból'}

    >>> y | x
    {'kulcs2': 'érték2-ből x', 'kulcs3': 'érték3-ból y', 'kulcs1': 'érték1-ből x'}

  • A beépített típusgyűjtemény tartalmazza a listát, a dict-et és a tuple-t, amelyek alaptípusként használhatók a gépelési modulból történő importálás nélkül. Azok. gépelés helyett.Lista, gépelés.Diktálás és gépelés.Tuple most megadható
    csak lista, diktál és sor:

    def greet_all(nevek: lista[str]) -> Nincs:
    a név a névben:
    print ("Hello", név)

  • biztosítottak rugalmas eszközök a függvények és változók annotálásához. A megjegyzések csatolásához egy új Annotated típus került a gépelési modulba, amely a meglévő típusokat további metaadatokkal bővíti, amelyek statikus elemzéshez vagy futásidejű optimalizáláshoz használhatók. A metaadatok kódból való eléréséhez az include_extras paramétert hozzáadtuk a typing.get_type_hints() metódushoz.

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

  • Tonizált nyelvtani követelmények a díszítők számára - bármilyen kifejezés, amely alkalmas az if and while blokkok használatára, dekorátorként használható. A változtatás jelentősen javította a PyQt5 kód olvashatóságát és leegyszerűsítette a modul karbantartását:

    Ez volt:
    button_0 = gombok[0] @button_0.clicked.connect

    Most már írhatod:
    @buttons[0].clicked.connect

  • A standard könyvtárba - tette hozzá modul zónainfo, amely az IANA időzóna adatbázisából származó információkat tartalmaz.

    >>> ZoneInfo importálása
    >>> from datetime import datetime, timedelta
    >>> # Nyári idő
    >>> dt = dátumidő(2020, 10, 31, 12, tzinfo=ZoneInfo("Amerika/Los_Angeles"))
    >>> nyomtatás (dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    "PDT"

    >>> # Normál idő
    >>> dt += idődelta(nap=7)
    >>> nyomtatás (dt)
    2020-11-07 12:00:00-08:00

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

  • Hozzáadott graphlib modul, amelyben végrehajtva gráfok topológiai rendezésének támogatása.
  • Javasolt új módszerek az előtagok és sorvégződések eltávolítására - str.removeprefix(prefix) és str.removesuffix(utótag). Metódusokat adtunk az str, byte, bytearray és collections.UserString objektumokhoz.

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'Rúd'

  • Magában foglal új elemző PEG (Parsing Expression Grammar), amely felváltotta az értelmezőt LL(1). Az új értelmező használata lehetővé tette az LL(1) korlátozásainak megkerülésére használt „hackek” egy részének megszabadulását, és jelentősen csökkentette az elemző karbantartásának munkaerőköltségét. Teljesítményben az új értelmező megközelítőleg egy szinten van az előzővel, de a rugalmasság terén jelentősen megelőzi azt, ami lehetővé teszi, hogy szabadabban érezzük magunkat új nyelvi funkciók tervezésénél. A régi értelmező kód egyelőre megmarad, és visszaadható a "-X oldparser" jelzővel vagy a "PYTHONOLDPARSER=1" környezeti változóval, de a 3.10-es kiadásban eltávolítjuk.
  • Biztosítani a C kiterjesztési metódusok azon képessége, hogy közvetlen mutatóhivatkozással hozzáférjenek azon modulok állapotához, amelyekben meg vannak határozva, ahelyett, hogy a PyState_FindModule függvény segítségével keresnék a modulállapotot. A változtatás lehetővé teszi a C modulok teljesítményének növelését azáltal, hogy csökkenti vagy teljesen megszünteti a modulállapot ellenőrzésének többletköltségét. Egy modul osztályhoz való társításához a PyType_FromModuleAndSpec() C-függvény javasolt, a modul és állapotának megszerzéséhez a PyType_GetModule() és PyType_GetModuleState() C-függvények, valamint az osztályhoz való hozzáférést biztosító metódus biztosítása. amelyben definiálva van, a PyCMethod C-függvény és a METH_METHOD jelző javasolt.
  • Szemetes szállított az újraanimált objektumokat tartalmazó gyűjtemények zárolásából, amelyek a véglegesítő lefutása után kívülről elérhetőek maradnak.
  • Hozzáadott módszer os.pidfd_open, amely lehetővé teszi a Linux kernel "pidfd" alrendszerének használatát a PID újrafelhasználási helyzetének kezelésére (a pidfd egy adott folyamathoz van társítva, és nem változik, míg a PID társítható egy másik folyamathoz, miután az adott PID-hez tartozó jelenlegi folyamat leáll ).
  • A Unicode specifikáció támogatása a 13.0.0-s verzióra frissült.
  • Eltüntetett memória szivárgás amikor ugyanabban a folyamatban újrainicializálja a Python értelmezőt.
  • A beépített típustartomány, tuple, set, frozenset, list és dict teljesítményét optimalizáltuk. végrehajtva a Vectorcall parancsikon protokoll használatával a C nyelven írt objektumok gyorsabb eléréséhez.
  • Az _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operátor, erőforrás, idő és _weakref modulok innen töltődnek be inicializálás több szakaszban.
  • A szabványos audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios és zlib könyvtármodulok korlátozott használatúvá lettek konvertálva. stabil ABI, amely megoldja a Python különböző verzióihoz tartozó bővítőmodul-összeállítások működőképességének problémáját (a verzió frissítésekor nincs szükség a bővítőmodulok újraépítésére, és a 3.9-re fordított modulok működni fognak a 3.10-es ágban).
  • Az asyncio modul elavult a reuse_address paraméter támogatása az esetleges biztonsági problémák miatt (a SO_REUSEADDR használata az UDP-hez Linuxon lehetővé teszi, hogy különböző folyamatok figyelő socketeket csatoljanak egy UDP-porthoz).
  • Új optimalizációk kerültek hozzáadásra, például a jelkezelők jobb teljesítménye többszálú alkalmazásokban, az alfolyamat modul sebességének növelése a FreeBSD-környezetben, valamint az ideiglenes változók gyorsabb hozzárendelése (változó hozzárendelése a "for y in [expr" kifejezésben ]” immár ugyanolyan teljesítőképes, mint az „y = expr” kifejezés. Általában a legtöbb teszt mutat teljesítménycsökkenés a 3.8 ághoz képest (gyorsulás csak a write_local és write_deque teszteknél 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ése:
    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
    beépített_olvasás 21.1 21.6 18.5 19.0 7.5 7.7
    olvasási_osztálynév_osztályból 25.6 26.5 20.7 19.5 18.4 18.6
    read_classvar_from_példány 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_bound módszer 37.6 37.9 29.6 26.9 27.7 45.9

    Változó és attribútum írási hozzáférése:
    írás_helyi 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
    írási_példányvar 44.6 45.8 40.0 38.9 35.5 40.7
    írási_példány_helyei 35.6 36.1 27.3 26.6 25.7 27.7

    Adatstruktúra olvasási hozzáférés:
    olvasható_lista 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úra írási hozzáférés:
    írási_lista 27.1 28.5 22.5 21.6 20.0 21.6
    írás_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ési hurok:
    hurok_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Eltávolítva számos Python 2.7-es függvény és metódus, amely korábban elavult volt, és az előző kiadásban DeprecationWarning figyelmeztetést eredményezett, beleértve az unescape() metódust a html.parser.HTMLParser fájlban,
    tostring() és fromstring() az array.array-ben, isAlive() a threadingben.Thread, getchildren() és getiterator() az ElementTree-ben, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() és base64.decodestring().

Forrás: opennet.ru

Hozzászólás