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.
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.
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
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):
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().