Pas njĂ« viti zhvillimi lĂ«shim tĂ« rĂ«ndĂ«sishĂ«m tĂ« gjuhĂ«s sĂ« programimit . Python 3.9 u bĂ« lĂ«shimi i parĂ« pas projektit nĂ« tĂ« pĂ«rgatitjes dhe mbĂ«shtetjes sĂ« lĂ«shimeve. LĂ«shimet 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Ă« tremujor, pas sĂ« cilĂ«s do tĂ« formohen korrigjime pĂ«r eliminimin e dobĂ«sive pĂ«r tre vite e gjysmĂ« tĂ« tjera.
Puna për degën e re tani fillon pesë muaj para lëshimit të degës tjetër, dmth. në të njëjtën kohë me lëshimin 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ë bëhen korrigjime të gabimeve. Pas kësaj, për tre muaj do të zhvillohet testimi i versioneve beta, gjatë të cilit do të ndalohet shtimi i mundësive të reja dhe gjithë vëmendja do t'i kushtohet korrigjimeve të gabimeve. Dy muajt e fundit para lëshimit, dega do të jetë në fazën e kandidatëve për lëshime, ku do të kryhet stabilizimi final.
në Python 3.9:
- Në fjalorët e përcaktuar me klasën e brendshme dict, mbështetje për operatorët e bashkimit «|» dhe azhornimit «|=», të cilat plotësojnë metodat {**d1, **d2} dhe dict.update, të propozuara më parë për të bashkuar fjalorët.
>>> x = {"key1": "value1 nga x", "key2": "value2 nga x"}
>>> y = {"key2": "value2 nga y", "key3": "value3 nga y"}>>> x | y
{'key1': 'value1 nga x', 'key2': 'value2 nga y', 'key3': 'value3 nga y'}>>> y | x
{'key2': 'value2 nga x', 'key3': 'value3 nga y', 'key1': 'value1 nga x'} - Koleksioni i brendshëm i llojeve përfshin list, dict dhe tuple, të cilat mund të përdoren si lloje bazë pa importim nga moduli typing. Pra, në vend të typing.List, typing.Dict dhe typing.Tuple tani mund të specifikohet
thjesht list, dict dhe tuple:def greet_all(names: list[str]) -> None:
për emër në names:
print("Hello", emër) - mjetet fleksibël për anotimin e funksioneve dhe variablave. Për të lidhur anotimet, moduli typing ka shtuar një tip të ri Annotated, i cili zgjat llojet ekzistuese me metadita shtesë që mund të përdoren gjatë analizës statike ose për optimizimet gjatë ekzekutimit. Për qasje në metadat nga kodi, metodës typing.get_type_hints() i ë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 pĂ«rdorim 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 PyQt5 dhe ka lehtĂ«suar mirĂ«mbajtjen e kĂ«tij moduli:
Ishte:
button_0 = buttons[0]
@button_0.clicked.connectTani mund të shkruhet:
@buttons[0].clicked.connect - Në bibliotekën standarde moduli , duke përfshirë informacionin nga baza e orareve IANA.
>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta
>>> # Koha verore
>>> 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 përkrahja për renditjen topologjike të grafëve.
- metoda tĂ« reja pĂ«r tĂ« hequr prefikset dhe prapashtesat e 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' - parseri i ri (Parsing Expression Grammar), që zëvendësoi parserin . Përdorimi i parserit të ri ka lejuar eliminimin e disa 'hakave' që përdoren për të kapërcyer kufizimet në LL(1) dhe ka ulur ndjeshëm kostot e mirëmbajtjes të parserit. Në aspektin e performancës, parseri i ri është në një nivel të ngjashëm me atë të mëparshëm, por e tejkalon atë në fleksibilitet, duke lejuar një ndjesi më të lirë në projektimin e mundësive të reja të gjuhës. Kodi i parserit të vjetër është ende ruajtur dhe mund të rikthehet me ndihmën e flagut '-X oldparser' ose variablës mjedisore 'PYTHONOLDPARSER=1', por do të hiqet në publikimin 3.10.
- mundësia e aksesit të metodave të zgjatjeve në C në gjendjen e moduleve në të cilat ato janë përcaktuar, duke përdorur dereferencimin e drejtpërdrejtë të treguesve në vend të kërkimit të gjendjes së modulit me funksionin PyState_FindModule. Ky ndryshim lejon përmirësimin e performancës së moduleve në C duke ulur ose përjashtuar plotësisht kostot e kontrollit të gjendjes së modulit. Për asociimin e modulit me klasën është propozuar funksioni C PyType_FromModuleAndSpec(), për të marrë modul dhe gjendjen e tij janë funksionet C PyType_GetModule() dhe PyType_GetModuleState(), dhe për t'i dhënë metodës akses në klasën në të cilën është përcaktuar, është funksioni C PyCMethod dhe flagu METH_METHOD.
- Koleksionuesi i plehrave nga bllokimit të koleksioneve që përfshijnë objekte të ringjallura, të cilat mbeten të aksesueshme edhe pas nisjes së finalizuesit.
- Shtuar metoda , duke lejuar përdorimin e nën-sistemit të bërthamës Linux "pidfd" për të trajtuar situatën e ripërdorimit të PID (pidfd lidhet me një proces të caktuar dhe nuk ndryshon, ndërsa PID mund të lidhet me një proces tjetër pas përfundimit të procesit aktual që lidhet me këtë PID).
- Mbështetje për specifikimin Unicode është përditësuar në versionin 13.0.0.
- Eliminuar në riparimin e interpretorit Python në një proces.
- ĂshtĂ« optimizuar performanca e tipeve tĂ« integruar range, tuple, set, frozenset, list dhe dict, pĂ«rmes pĂ«rdorimit 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ë përkthyer në ngarkim me .
- Modulet e bibliotekës standarde audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios dhe zlib janë përkthyer për të përdorur ABI të , e cila zgjidh problemin e funksionalitetit të ndërtimit të moduleve të zgjerimit për versione të ndryshme të Python (në përditësimin e versionit nuk kërkohet ricompilimi i moduleve të zgjerimit, dhe modulet e ndërtuara për 3.9 do të funksionojnë në degën 3.10).
- Në modulin 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ë lidhin soketët dëgjuese në portin UDP).
- Janë shtuar optimizime të reja, për shembull, është rritur performanca e trajtuesve të sinjaleve në aplikacione shumë-fisnike, është rritur shpejtësia e modulit subprocess në mjedisin FreeBSD dhe është përshpejtuar caktimi i variablave temporarë (caktimi i një variabli në shprehjen "për y në [expr]" tani nuk është më i ngadaltë se shprehja "y = expr"). Në përgjithësi, shumica e testeve kanë treguar një rënie të performancës në krahasim 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
âââââ â â â â â âQasja nĂ« leximin e variablave dhe karakteristikave:
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
lexo_clasvar_nga_clas 25.6 26.5 20.7 19.5 18.4 18.6
lexo_clasvar_nga_instance 22.8 23.5 18.8 17.1 16.4 20.1
lexo_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
lexo_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
lexo_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
lexo_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9Qasje dhe qasje në atribut dhe variabël:
lexo_local 8.7 9.3 5.5 5.3 4.3 4.2
lexo_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
lexo_global 19.7 21.2 18.0 18.0 15.8 17.2
lexo_classvar 92.9 96.0 104.6 102.1 39.2 43.2
lexo_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
lexo_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7Qasje në strukturat e dhënash:
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ë shkruaj si struktura të dhënash:
lexo_list 27.1 28.5 22.5 21.6 20.0 21.6
lexo_deque 28.7 30.1 22.7 21.8 23.5 23.2
lexo_dict 31.4 33.3 29.3 29.2 24.7 27.8
lexo_strdict 28.4 29.9 27.5 25.2 23.1 29.8Operacione në grumbuj (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.5Kohëzgjatja e ciklit:
cikli_overhead 0.5 0.6 0.4 0.3 0.3 0.3 - Shumë funksione dhe metoda Python 2.7, të cilat më parë ishin shënuar si të braktisura dhe në lëshimin e kaluar shkaktonin një paralajmërim DeprecationWarning, duke 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
