Wara sena ta 'żvilupp ippreżentata rilaxx sinifikanti tal-lingwa tal-programmazzjoni python 3.9. Python 3.9 kien l-ewwel rilaxx wara transizzjoni proġett fuq ċiklu ġdid preparazzjoni u appoġġ tar-rilaxxi. Rilaxxi ewlenin ġodda issa se jiġu ġġenerati darba fis-sena, u aġġornamenti korrettivi se jiġu rilaxxati kull xahrejn. Kull fergħa sinifikanti se tkun appoġġjata għal sena u nofs, u wara se jiġu żviluppati tliet snin u nofs oħra biex tirranġa l-vulnerabbiltajiet.
Ix-xogħol fuq fergħa ġdida issa jibda ħames xhur qabel ir-rilaxx tal-fergħa li jmiss, i.e. jikkoinċidi mar-rilaxx ta 'Python 3.9 beda ittestjar alfa tal-fergħa Python 3.10. Il-fergħa Python 3.10 se tkun fil-ħruġ alpha għal seba 'xhur, li matulhom se jiżdiedu karatteristiċi ġodda u l-bugs jiġu ffissati. Wara dan, verżjonijiet beta se jiġu ttestjati għal tliet xhur, li matulhom iż-żieda ta 'karatteristiċi ġodda se tkun ipprojbita u se tingħata l-attenzjoni kollha għall-iffissar tal-bugs. L-aħħar xahrejn qabel ir-rilaxx, il-fergħa tkun fl-istadju tal-kandidat għar-rilaxx, li fih issir l-istabbilizzazzjoni finali.
F'dizzjunarji definiti bl-użu tal-klassi dict inkorporata, deher appoġġ għall-operaturi tal-għaqda "|" u "|=" aġġornamenti, li jikkumplimentaw il-metodi {**d1, **d2} u dict.update proposti qabel biex jingħaqdu dizzjunarji.
>>> x = {"key1": "valur1 minn x", "key2": "valur2 minn x"}
>>> y = {"key2": "valur2 minn y", "key3": "valur3 minn y"}
>>> x | y
{'key1': 'valur1 minn x', 'key2': 'valur2 minn y', 'key3': 'valur3 minn y'}
>>> y | x
{'key2': 'valur2 minn x', 'key3': 'valur3 minn y', 'key1': 'valur1 minn x'}
Il-ġbir ta 'tipi integrati jinkludi lista, dict, u tuple, li jistgħu jintużaw bħala tipi bażi mingħajr ma jimportaw mill-modulu tat-tajpjar. Dawk. minflok ittajpjar.List, typing.Dict u typing.Tuple issa tista' tispeċifika
biss lista, dict u tuple:
Huma pprovduti għodod flessibbli għall-annotazzjoni tal-funzjonijiet u l-varjabbli. Għat-twaħħil ta' annotazzjonijiet, ġie miżjud tip Annotat ġdid mal-modulu tat-tajpjar, li jestendi t-tipi eżistenti b'metadejta addizzjonali li tista' tintuża għal analiżi statika jew għal ottimizzazzjonijiet ta' run-time. Biex taċċessa l-metadata mill-kodiċi, il-parametru include_extras ġie miżjud mal-metodu typing.get_type_hints().
Attenwat rekwiżiti grammatikali għal dekoraturi - kwalunkwe espressjoni adattata għall-użu fl-if u filwaqt li blokki issa jistgħu jintużaw bħala dekoratur. Il-bidla tejbet b'mod sinifikanti l-leġibbiltà tal-kodiċi PyQt5 u ssimplifikat il-manutenzjoni ta 'dan il-modulu:
Lil-librerija standard miżjud modulu zoneinfo, li tinkludi informazzjoni mid-database taż-żona tal-ħin tal-IANA.
>>> minn zoneinfo importazzjoni ZoneInfo
>>> minn datetime importazzjoni datetime, timedelta
>>> # Ħin tas-sajf
>>> dt = datatime(2020, 10, 31, 12, tzinfo=ZoneInfo("Amerika/Los_Angeles"))
>>> print(dt)
2020-10-31 12:00:00-07:00
>>> dt.tzname()
'PDT'
>>> # Ħin standard
>>> dt += timedelta(jiem=7)
>>> print(dt)
2020-11-07 12:00:00-08:00
>>> print(dt.tzname())
PST
Modulu graphlib miżjud, li fih implimentati appoġġ għall-għażla topoloġika tal-grafiċi.
Propost metodi ġodda għat-tneħħija tal-prefissi u t-truf tal-linja - str.removeprefix(prefix) u str.removesuffix(suffix). Ġew miżjuda metodi għall-oġġetti str, bytes, bytearray u collections.UserString.
>>> s = "FooBar"
>>> s.removeprefix("Foo")
'Bar'
Involut parser ġdid PEG (Parsing Expression Grammar), li ssostitwixxa l-parser LL(1). L-użu tal-parser il-ġdid għamilha possibbli li teħles minn uħud mill-"hacks" użati biex tevita r-restrizzjonijiet f'LL(1), u naqqas b'mod sinifikanti l-ispejjeż tax-xogħol għaż-żamma tal-parser. F'termini ta 'prestazzjoni, l-parser il-ġdid huwa bejn wieħed u ieħor fuq l-istess livell bħal dak ta' qabel, iżda huwa sinifikament quddiemu f'termini ta 'flessibilità, li jippermettilek li tħossok aktar liberu meta tfassal karatteristiċi lingwistiċi ġodda. Il-kodiċi antik tal-parser jinżamm għalissa u jista' jiġi rritornat bl-użu tal-marka "-X oldparser" jew il-varjabbli tal-ambjent "PYTHONOLDPARSER=1", iżda se jitneħħa fir-rilaxx 3.10.
Ipprovdut l-abbiltà għall-metodi ta 'estensjoni C li jaċċessaw l-istat tal-moduli li fihom huma definiti bl-użu ta' dereference tal-pointer dirett minflok ma jfittxu l-istat tal-modulu bl-użu tal-funzjoni PyState_FindModule. Il-bidla tippermettilek li żżid il-prestazzjoni tal-moduli C billi tnaqqas jew telimina kompletament l-overhead tal-verifika tal-istat tal-modulu. Biex tassoċja modulu ma 'klassi, il-funzjoni C PyType_FromModuleAndSpec() hija proposta, biex jinkisbu l-modulu u l-istat tiegħu, il-funzjonijiet C PyType_GetModule() u PyType_GetModuleState() huma proposti, u biex jipprovdu metodu b'aċċess għall-klassi li fiha hija definita, il-funzjoni C-PyCMethod u l-bandiera METH_METHOD huma proposti.
Kollettur taż-żibel mogħtija minn kollezzjonijiet li jissakkru li fihom oġġetti animati mill-ġdid li jibqgħu aċċessibbli esternament wara li l-finalizzatur jibda.
Metodu miżjud os.pidfd_open, li tippermetti li s-subsistema tal-qalba tal-Linux "pidfd" tintuża biex tittratta s-sitwazzjoni tal-użu mill-ġdid tal-PID (pidfd huwa assoċjat ma' proċess speċifiku u ma jinbidilx, filwaqt li PID jista' jiġi assoċjat ma' proċess ieħor wara li jintemm il-proċess attwali assoċjat ma' dak il-PID ).
L-appoġġ għall-ispeċifikazzjoni Unicode ġie aġġornat għall-verżjoni 13.0.0.
Eliminati tnixxija tal-memorja meta terġa' tibda l-interpretu Python fl-istess proċess.
Il-prestazzjoni tal-firxa tat-tipi mibnija, tuple, sett, frozenset, lista u dict ġiet ottimizzata. implimentati permezz tal-użu tal-protokoll ta' shortcut Vectorcall għal aċċess aktar mgħaġġel għal oġġetti miktuba fil-lingwa Ċ.
Il-moduli _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time u _weakref huma mgħobbija minn inizjalizzazzjoni f'diversi stadji.
Il-moduli standard tal-librerija audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios u zlib ġew konvertiti għall-użu ristrett ABI stabbli, li ssolvi l-problema ta 'l-operabilità ta' assemblaġġi ta 'moduli ta' estensjoni għal verżjonijiet differenti ta 'Python (meta taġġorna l-verżjoni, m'hemmx bżonn li jerġgħu jinbnew moduli ta' estensjoni, u moduli kkompilati għal 3.9 se jkunu jistgħu jaħdmu fil-fergħa 3.10).
Il-modulu asyncio waqqaf l-appoġġ għall-parametru reuse_address minħabba kwistjonijiet potenzjali ta’ sigurtà (l-użu ta’ SO_REUSEADDR għal UDP fuq Linux jippermetti proċessi differenti biex iwaħħlu sokits tas-smigħ ma’ port UDP).
Ġew miżjuda ottimizzazzjonijiet ġodda, pereżempju, prestazzjoni mtejba tal-handlers tas-sinjali f'applikazzjonijiet b'ħafna kamini, żieda fil-veloċità tal-modulu tas-sottoproċess fl-ambjent FreeBSD, u assenjazzjoni aktar mgħaġġla ta 'varjabbli temporanji (assenjazzjoni ta' varjabbli fl-espressjoni "għal y fi [expr ]” issa hija performanti daqs l-espressjoni “y = expr” “). B'mod ġenerali, ħafna testijiet juru tnaqqis fil-prestazzjoni meta mqabbel mal-fergħa 3.8 (il-veloċità hija osservata biss fit-testijiet write_local u write_deque):
Imneħħija ħafna funzjonijiet u metodi Python 2.7 li qabel kienu deprecati u rriżultaw f'DeprecationWarning fir-rilaxx preċedenti, inkluż il-metodu unescape() f'html.parser.HTMLParser,
tostring() u fromstring() f'array.array, isAlive() fil-thread.Thread, getchildren() u getiterator() f'ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() u base64.decodestring().