Pas njĂ« vit zhvillimi publikim i rĂ«ndĂ«sishĂ«m i gjuhĂ«s sĂ« programimit . Python 3.9 u bĂ« publikimi i parĂ« pas projekti nĂ« tĂ« pĂ«rgatitjes dhe mbĂ«shtetjes sĂ« lĂ«shimeve. Publikimet e reja tĂ« rĂ«ndĂ«sishme tani do tĂ« formohen njĂ« herĂ« nĂ« vit, ndĂ«rsa pĂ«rditĂ«simet korrektuese do tĂ« lĂ«shohen çdo dy muaj. Ădo degĂ« e rĂ«ndĂ«sishme do tĂ« mbĂ«shtetet pĂ«r njĂ« periudhĂ« prej njĂ« viti e gjysmĂ«, pas sĂ« cilĂ«s do tĂ« formohen rregullime pĂ«r tĂ« pĂ«rballuar dobĂ«sitĂ« pĂ«r tre vjet e gjysmĂ« tĂ« tjera.
Puna mbi degën e re tani fillon pesë muaj përpara lëshimit të degës tjetër, dmth. në të njëjtën kohë me publikimin e Python 3.9 testimi alfa i degës Python 3.10. Dega Python 3.10 do të jetë në fazën e lëshimeve alfa për shtatë muaj, gjatë të cilëve do të shtohen mundësi të reja dhe do të korrigjohen gabimet. Pasi të kalojë kjo periudhë, për tre muaj do të kryhet testimi i lëshimeve beta, gjatë të cilit do të ndalohet shtimi i mundësive të reja dhe gjithë vëmendja do t'i kushtohet korrigjimit të gabimeve. Dy muajt e fundit para lëshimit, dega do të jetë në fazën e kandidatëve për lëshim, ku do të realizohet stabilizimi përfundimtar.
në Python 3.9:
- Në fjalorët e përcaktuar me klasën e ndërtuar dict, mbështetje për operatorët e bashkimit «|» dhe përditësimit «|=», të cilët plotësojnë metodat {**d1, **d2} dhe dict.update, të cilat më parë janë propozuar për bashkimin e fjalorëve.
>>> x = {«çelësi1»: «vlera1 nga x», «çelësi2»: «vlera2 nga x»}
>>> y = {«çelësi2»: «vlera2 nga y», «çelësi3»: «vlera3 nga y»}>>> x | y
{âçelĂ«si1â: âvlera1 nga xâ, âçelĂ«si2â: âvlera2 nga yâ, âçelĂ«si3â: âvlera3 nga yâ}>>> y | x
{âçelĂ«si2â: âvlera2 nga xâ, âçelĂ«si3â: âvlera3 nga yâ, âçelĂ«si1â: âvlera1 nga xâ} - Koleksioni i llojeve tĂ« integruara pĂ«rfshin listĂ«n, fjalorin dhe tuple, tĂ« cilat mund tĂ« pĂ«rdoren si lloje bazĂ« pa u importuar nga moduli typing. Pra, nĂ« vend tĂ« typing.List, typing.Dict dhe typing.Tuple tani mund tĂ« specifikoni
thjesht listë, fjalor dhe tuple:def greet_all(names: list[str]) -> None:
për emër në emra:
print('Hello', emër) - mjetet fleksibile për annotimin e funksioneve dhe variablave. Për të bashkangjitur annotimet, në modulin typing është shtuar një lloj i ri Annotated, që zgjerohet me metadaten ekzistuese, të cilat mund të përdoren gjatë analizës statike ose për optimizime gjatë ekzekutimit. Për të hyrë në metadatën nga kodi, në metodën typing.get_type_hints() është shtuar parametri include_extras.
charType = Annotated[int, ctype('char')]
UnsignedShort = Annotated[int, struct2.ctype('H')] - kĂ«rkesat gramatikore pĂ«r dekoratorĂ«t â çdo shprehje e pĂ«rshtatshme pĂ«r t'u pĂ«rdorur nĂ« blloqet if dhe while tani mund tĂ« pĂ«rdoret si dekorator. Ky ndryshim ka lejuar njĂ« pĂ«rmirĂ«sim tĂ« dukshĂ«m tĂ« lexueshmĂ«risĂ« sĂ« kodit nĂ« PyQt5 dhe ka thjeshtĂ«suar mirĂ«mbajtjen e kĂ«tij moduli:
Ishte:
button_0 = buttons[0]
@button_0.clicked.connectTani mund të shkruani:
@buttons[0].clicked.connect - Në bibliotekën standarde moduli , duke përfshirë informacion nga baza e zona të kohës IANA.
>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta
>>> # Koha veror
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo('America/Los_Angeles'))
>>> print(dt)
2020-10-31 12:00:00-07:00>>> dt.tzname()
âPDTâ>>> # Koha standarde
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00>>> print(dt.tzname())
PST - Moduli graphlib është shtuar, në të cilin mbështetet renditja topologjike e grafëve.
- metoda tĂ« reja pĂ«r heqjen e prefikseve dhe sufikseve tĂ« vargjeve â str.removeprefix(prefix) dhe str.removesuffix(suffix). Metodat janĂ« shtuar nĂ« objektet str, bytes, bytearray dhe collections.UserString.
>>> s = 'FooBar'
>>> s.removeprefix('Foo')
âBarâ - njĂ« parser i ri (Gramatika e Shprehjes sĂ« AnalizĂ«s), e cila zĂ«vendĂ«soi parserin . PĂ«rdorimi i parser-it tĂ« ri lehtĂ«soi eliminimin e disa «hack-Ă«ve» qĂ« ishin pĂ«rdorur pĂ«r tĂ« anashkaluar kufizimet nĂ« LL(1), dhe ndjeshĂ«m ulĂ«n kostot e miratimit tĂ« parser-it. NĂ« aspektin e performancĂ«s, parser-i i ri Ă«shtĂ« afĂ«rsisht nĂ« tĂ« njĂ«jtin nivel me tĂ« kaluarin, por e ka tejkaluar atĂ« nĂ« aspektin e fleksibilitetit, qĂ« lejon njĂ« ndjesi mĂ« tĂ« lirĂ« gjatĂ« projektimit tĂ« mundĂ«sive tĂ« reja tĂ« gjuhĂ«s. Kodi i parser-it tĂ« vjetĂ«r Ă«shtĂ« ende ruajtur dhe mund tĂ« rikthehet me ndihmĂ«n e flagut «-X oldparser» ose variablĂ«s sĂ« ambientit «PYTHONOLDPARSER=1», por do tĂ« fshihet nĂ« versionin 3.10.
- mundësi për qasje të metodave të zgjerimeve C në gjendjen e moduleve ku ato janë përcaktuar, duke përdorur dereferencimin e drejtpërdrejtë të treguesve në vend të kërkimit të gjendjes së modulit me anë të funksionit PyState_FindModule. Ky ndryshim lejon përmirësimin e performancës të moduleve në C duke ulur ose eliminuar plotësisht shpenzimet administrative për kontrollin e gjendjes së modulit. Për të asociuar modulit me një klasë është propozuar funksioni C PyType_FromModuleAndSpec(), për të marrë modulit dhe gjendjen e tij funksionet C PyType_GetModule() dhe PyType_GetModuleState(), dhe për të siguruar një metodë aksesit në klasën në të cilën është përcaktuar, funksioni C PyCMethod dhe flagu METH_METHOD.
- Grumbulluesi i mbeturinave nga bllokimi i koleksioneve që përfshijnë objekte të ringjallura, të cilat mbeten të aksesueshme nga jashtë pas ekzekutimit të finalizatorit.
- Metoda e re , që lejon përdorimin e nënshkallës së bërthamës Linux "pidfd" për trajtimin e situatave me ripërdorimin e PID (pidfd lidhet me një proces specifik dhe nuk ndryshon, ndërsa PID mund të lidhet me një proces tjetër pas përfundimit të procesit aktual që është asociuar me këtë PID).
- Mbështetje për specifikimin Unicode është azhurnuar në versionin 13.0.0.
- ĂshtĂ« eliminuar kur rinitializohet interpretuese Python nĂ« njĂ« proces.
- Optimizimi i performancës së tipeve të integruar range, tuple, set, frozenset, list dhe dict, nëpërmjet aplikimit të protokollit të thirrjes së shpejtë Vectorcall për qasje më të shpejtë në objekte të shkruara në gjuhën C.
- Modulet _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time dhe _weakref janë Azhurnuar për t'u ngarkuar me .
- Modulet e bibliotekës standarde audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios dhe zlib janë Azhurnuar për të përdorur ABI , i cili zgjidh problemin e funksionimit të ndërtimeve të moduleve të zgjerimeve për versione të ndryshme Python (me përditësimin e versionit nuk kërkohet që të rindërtohen modulet e zgjerimeve, dhe modulet e ndërtuara për 3.9, do të mund të funksionojnë në degën 3.10).
- Në modulın asyncio, për shkak të problemeve të mundshme me sigurinë, është ndërprerë mbështetja për parametrin reuse_address (përdorimi i SO_REUSEADDR për UDP në Linux lejon që procese të ndryshme të lidhen me soket të dëgjimit në UDP-port).
- Janë shtuar optimizime të reja, për shembull, është rritur performanca e menaxherëve të sinjaleve në aplikacionet multithread, është rritur shpejtësia e modulit subprocess në mjedisin FreeBSD dhe është përshpejtuar caktimi i variablave të përkohshëm (caktimi i variablit në shprehjen «for y in [expr]» tani nuk është më i ngadaltë se shprehja «y = expr»). Në përgjithësi, shumica e testeve rënien e performancës krahasuar me degën 3.8 (përshpejtimi vërehet vetëm në testet write_local dhe write_deque):
Versioni Python 3.4 3.5 3.6 3.7 3.8 3.9
âââââ â â â â â âAksesimi i variablave dhe atributĂ«ve:
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.9Aksesimi për shkrimin e variablave dhe atributëve:
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
shkruaj_global 19.7 21.2 18.0 18.0 15.8 17.2
shkruaj_classvar 92.9 96.0 104.6 102.1 39.2 43.2
shkruaj_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
shkruaj_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7Qasje në strukturat e të dhënave:
lexo_list 24.2 24.5 20.8 20.8 19.0 21.1
lexo_deque 24.7 25.5 20.2 20.6 19.8 21.6
lexo_dict 24.3 25.7 22.3 23.0 21.0 22.5
lexo_strdict 22.6 24.3 19.5 21.2 18.9 21.6Qasje në strukturat e të dhënave për shkrim:
shkruaj_list 27.1 28.5 22.5 21.6 20.0 21.6
shkruaj_deque 28.7 30.1 22.7 21.8 23.5 23.2
shkruaj_dict 31.4 33.3 29.3 29.2 24.7 27.8
shkruaj_strdict 28.4 29.9 27.5 25.2 23.1 29.8Operacione me stivë (ose radhë):
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.5Matja e ciklit:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3 - mjaft funkcione dhe metoda Python 2.7, të cilat më parë ishin shënuar si të vjetëruara dhe në lëshimin e kaluar shkaktuan një paralajmërim DeprecationWarning, përfshirë metodën unescape() në html.parser.HTMLParser,
tostring() dhe fromstring() në array.array, isAlive() në threading.Thread, getchildren() dhe getiterator() në ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() dhe base64.decodestring().
Burimi: opennet.ru
