Apre yon ane nan devlopman lage enpòtan nan langaj pwogramasyon . Python 3.9 te premye lage apre pwojè sou preparasyon ak sipò pou degaje yo. Nouvo pi gwo lage yo pral pwodwi kounye a yon fwa chak ane, ak mizajou korektif yo pral lage chak de mwa. Chak branch enpòtan yo pral sipòte pou yon ane edmi, apre sa yo pral devlope yon lòt twa ane edmi pou li ranje frajilite yo.
Travay sou yon nouvo branch kounye a kòmanse senk mwa anvan lage pwochen branch lan, i.e. kowenside ak liberasyon Python 3.9 tès alfa nan branch Python 3.10 la. Branch Python 3.10 la pral nan lage alfa pandan sèt mwa, pandan sa yo pral ajoute nouvo karakteristik ak ensèk yo fikse. Apre sa, vèsyon beta yo pral teste pandan twa mwa, pandan sa yo pral entèdi ajoute nouvo karakteristik epi yo pral peye tout atansyon a repare pinèz. De dènye mwa yo anvan liberasyon an, branch lan pral nan etap kandida lage, nan ki estabilizasyon final la pral fèt.
nan Python 3.9:
- Nan diksyonè ki defini lè l sèvi avèk klas dict entegre, sipò pou operatè fizyon "|" ak "|=" mizajou, ki konpleman {**d1, **d2} ak metòd dict.update yo te pwopoze deja pou fizyone diksyonè yo.
>>> x = {"key1": "valè1 soti nan x", "key2": "valè2 soti nan x"}
>>> y = {"key2": "valè2 soti nan y", "key3": "valè3 soti nan y"}>>> x | y
{'key1': 'valè1 soti nan x', 'key2': 'valè2 soti nan y', 'key3': 'valè3 soti nan y'}>>> y | x
{'key2': 'valè2 soti nan x', 'key3': 'valè3 soti nan y', 'key1': 'valè1 soti nan x'} - Koleksyon an entegre nan kalite gen ladan lis, dict, ak tuple, ki ka itilize kòm kalite baz san yo pa enpòte soti nan modil la sezisman. Moun sa yo. olye pou yo tape.Lis, tape.Dict ak tape.Tuple ou kapab kounye a presize
jis lis, dict ak tuple:def greet_all(non: list[str]) -> Okenn:
pou non nan non:
print("Bonjou", non) - zouti fleksib pou anote fonksyon ak varyab. Pou tache annotations, yo te ajoute yon nouvo tip Annotated nan modil sezisman an, pwolonje kalite ki egziste deja yo ak metadata adisyonèl ki ka itilize pou analiz estatik oswa pou optimize tan an. Pou jwenn aksè nan metadata nan kòd, yo te ajoute paramèt include_extras nan metòd typing.get_type_hints().
charType = Annotated[int, ctype("char")] UnsignedShort = Annotated[int, struct2.ctype('H')]
- kondisyon gramatikal pou dekoratè - nenpòt ekspresyon apwopriye pou itilize nan si ak pandan y ap blòk kounye a ka itilize kòm yon dekoratè. Chanjman an te amelyore anpil lizibilite kòd PyQt5 la ak senplifye antretyen modil sa a:
Te:
button_0 = bouton[0] @button_0.clicked.connectKoulye a, ou ka ekri:
@buttons[0].klike.konekte - Nan bibliyotèk la estanda modil , ki gen ladann enfòmasyon ki soti nan baz done zòn lè IANA.
>>> soti nan zoneinfo enpòte ZoneInfo
>>> soti nan datetime enpòte datetime, timedelta
>>> # Lè ete
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> enprime (dt)
2020-10-31 12:00:00-07:00>>> dt.tzname()
'PDT'>>> # Tan estanda
>>> dt += timedelta(jou=7)
>>> enprime (dt)
2020-11-07 12:00:00-08:00>>> enprime(dt.tzname())
PST - Te ajoute modil graphlib, nan ki sipò pou klasman topolojik graf.
- nouvo metòd pou retire prefiks ak tèminezon liy - str.removeprefix(prefix) ak str.removesuffix(suffix). Metòd yo te ajoute nan str, bytes, bytearray ak collections.UserString objè yo.
>>> s = "FooBar"
>>> s.removeprefix("Foo")
'Bar' - nouvo analizeur (Parsing Expression Grammar), ki ranplase parser la . Itilizasyon nouvo analizeur a te fè li posib pou debarase m de kèk nan "antay" yo te itilize pou kontoune restriksyon ki nan LL(1), ak siyifikativman redwi depans travay yo pou kenbe analizeur la. An tèm de pèfòmans, nouvo parser la apeprè nan menm nivo ak anvan an, men li siyifikativman devan li an tèm de fleksibilite, ki pèmèt ou santi w pi lib lè w ap desine nouvo karakteristik langaj. Ansyen kòd parser la konsève pou kounye a epi yo ka retounen avèk drapo "-X oldparser" oswa varyab anviwònman "PYTHONOLDPARSER=1", men yo pral retire nan lage 3.10.
- kapasite pou metòd ekstansyon C pou jwenn aksè nan eta modil kote yo defini lè l sèvi avèk dereferans dirèk konsèy olye pou yo chèche eta modil la lè l sèvi avèk fonksyon PyState_FindModule. Chanjman an pèmèt ou ogmante pèfòmans nan modil C lè w diminye oswa elimine nèt sou tèt yo nan tcheke eta modil la. Pou asosye yon modil ak yon klas, yo pwopoze fonksyon C PyType_FromModuleAndSpec(), pou jwenn modil la ak eta li yo, yo pwopoze fonksyon C PyType_GetModule() ak PyType_GetModuleState(), epi pou bay yon metòd ak aksè nan klas la. kote li defini, PyCMethod C-fonksyon ak drapo METH_METHOD yo pwopoze.
- Pèseptè fatra soti nan koleksyon fèmen ki gen objè reanime ki rete aksesib deyò apre finalizè a kouri.
- Metòd te ajoute , ki pèmèt Linux kernel subsystem "pidfd" pou itilize pou jere sitiyasyon rÊutilisation PID (pidfd asosye ak yon pwosesis espesifik epi li pa chanje, alòske yon PID ka asosye ak yon lòt pwosesis apre pwosesis aktyèl ki asosye ak PID sa a fini. ).
- Sipò pou spesifikasyon Unicode yo te mete ajou nan vèsyon 13.0.0.
- Elimine lè w reinisyalize entèprèt Python nan menm pwosesis la.
- Yo te optimize pèfòmans nan seri kalite entegre, tuple, mete, frozenset, lis ak dict. atravè itilizasyon pwotokòl rakoursi Vectorcall pou aksè pi rapid nan objè ki ekri nan lang C a.
- _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operatè, resous, tan ak _weakref modil yo te deplase nan loading soti nan .
- Modil bibliyotèk estanda audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios ak zlib yo te konvèti pou itilize restriksyon. , ki rezoud pwoblèm nan nan operasyon nan asanble nan modil ekstansyon pou diferan vèsyon nan Python (lè mete ajou vèsyon an, pa gen okenn bezwen rebati modil ekstansyon, ak modil konpile pou 3.9 yo pral kapab travay nan branch 3.10 la).
- Modil asyncio la te obsève sipò pou paramèt reuse_address akòz pwoblèm sekirite potansyèl (sèvi ak SO_REUSEADDR pou UDP sou Linux pèmèt diferan pwosesis yo tache priz koute nan yon pò UDP).
- Nouvo optimize yo te ajoute, pou egzanp, amelyore pèfòmans moun k ap okipe siyal yo nan aplikasyon milti-threaded, ogmante vitès modil sub-pwosesis la nan anviwònman FreeBSD, ak plasman pi rapid nan varyab tanporè (bay yon varyab nan ekspresyon an "pou y nan [expr". ]" se kounye a menm jan ak ekspresyon "y = ekspr" "). An jeneral, pifò tès yo pèfòmans diminye konpare ak branch 3.8 (yo obsève vitès sèlman nan tès write_local ak write_deque):
Python vèsyon 3.4 3.5 3.6 3.7 3.8 3.9
âââââ â â â â â âAksè lekti varyab ak atribi:
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.9Aksè pou ekri varyab ak atribi:
ekri_lokal 8.7 9.3 5.5 5.3 4.3 4.2
ekri_non lokal 10.5 11.1 5.6 5.5 4.7 4.9
ekri_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
write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7Aksè pou lekti estrikti done:
lis_li 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.6Aksè ekri nan estrikti done:
ekri_lis 27.1 28.5 22.5 21.6 20.0 21.6
write_deque 28.7 30.1 22.7 21.8 23.5 23.2
ekri_dikt 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.8Pile (oswa keu) operasyon:
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.5Bouk distribisyon:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3 - anpil fonksyon ak metòd Python 2.7 ki te obsolète deja epi ki te lakòz yon Avètisman Deprecation nan vèsyon anvan an, ki gen ladan metòd unescape() nan html.parser.HTMLParser,
tostring () ak fromstring () nan array.array, isAlive () nan threading.Thread, getchildren () ak getiterator () nan ElementTree, sys.getcheckinterval (), sys.setcheckinterval (), asyncio.Task.current_task (), asyncio.Task.all_tasks(), base64.encodestring() ak base64.decodestring().
Sous: opennet.ru
