PĂ€rast aasta arendust tĂ€htis programmeerimiskeele vĂ€ljaanne . Python 3.9 on esimene vĂ€ljaanne pĂ€rast projektile vĂ€ljaannete ettevalmistamiseks ja toetamiseks. Uued olulised vĂ€ljaanded toimuvad nĂŒĂŒd kord aastas, samas kui parandusi avaldatakse iga kahe kuu tagant. Iga oluline haru toetatakse poolteist aastat, seejĂ€rel tehakse sellele veel kolme ja pool aasta jooksul turvaparandusi.
Uue haru arendamine algab nĂŒĂŒd viis kuud enne jĂ€rgmise haru vĂ€ljaandmist, st samaaegselt Python 3.9 alpha-testimisega Python 3.10 haru. Python 3.10 haru on alphas vĂ€ljaannetel seitse kuud, mille jooksul lisatakse uusi funktsioone ja parandatakse vigu. PĂ€rast seda toimub kolme kuu jooksul beetaversioonide testimine, mille kĂ€igus ei lubata uute funktsioonide lisamist ja kĂ”ik tĂ€helepanu keskendub vigade parandamisele. Viimased kaks kuud enne vĂ€ljaannet on haru kandidaatide vabastamise faasis, kus toimub lĂ”plik stabiliseerimine.
Python 3.9-s:
- SĂ”nastikes, mis on mÀÀratud sisseehitatud klassi dict abil, on toetatud ĂŒhinemisoperaatorid â|â ja uuendamise operaator â|=â, mis tĂ€iustavad meetodeid {**d1, **d2} ja dict.update, mis varem olid pakutud sĂ”nastike ĂŒhendamiseks.
>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}>>> x | y
{âkey1â: âvalue1 from xâ, âkey2â: âvalue2 from yâ, âkey3â: âvalue3 from yâ}>>> y | x
{âkey2â: âvalue2 from xâ, âkey3â: âvalue3 from yâ, âkey1â: âvalue1 from xâ} - Sisseehitatud tĂŒĂŒpide kogum sisaldab loendi, sĂ”nastiku ja tuple, mida saab kasutada pĂ”hitĂŒĂŒpidena ilma mooduli typing importimata. St. asemel typing.List, typing.Dict ja typing.Tuple vĂ”ib nĂŒĂŒd mÀÀrata
lihtsalt list, dict ja tuple:def greet_all(names: list[str]) -> None:
for name in names:
print("Hello", name) - paindlikud vahendid funktsioonide ja muutujate annotatsioonide tegemiseks. Uus Annotated tĂŒĂŒp on lisatud typing moodulisse, mis laiendab olemasolevaid tĂŒĂŒpe tĂ€iendavate metainformatsioonidega, mida saab kasutada staatiliseks analĂŒĂŒsiks vĂ”i tĂ€itmise ajal optimeerimiseks. Metainformatsioonile juurdepÀÀsu saamiseks on meetodisse typing.get_type_hints() lisatud parameeter include_extras.
charType = Annotated[int, ctype("char")]
UnsignedShort = Annotated[int, struct2.ctype('H')] - dekoratorite grammatikanĂ”uded â iga vĂ€ljend, mis sobib kasutamiseks if ja while plokkides, saab nĂŒĂŒd kasutada dekoratorina. Muudatus on oluliselt parandanud PyQt5 koodi loetavust ja lihtsustanud selle mooduli hooldamist:
Oli:
button_0 = buttons[0]
@button_0.clicked.connectNĂŒĂŒd saab kirjutada:
@buttons[0].clicked.connect - Standardse raamatukogu moodul , mis sisaldab teavet IANA ajavööndite andmebaasist.
>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta
>>> # Suveaeg
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> print(dt)
2020-10-31 12:00:00-07:00>>> dt.tzname()
'PDT'>>> # Talveaeg
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00>>> print(dt.tzname())
PST - Lisatud moodul graphlib, mis toetab graafide topoloogilist sorteerimist.
- uued meetodid stringide ees- ja jĂ€relliidete eemaldamiseks â str.removeprefix(prefix) ja str.removesuffix(suffix). Meetodid on lisatud str, bytes, bytearray ja collections.UserString objektidesse.
>>> s = "FooBar"
>>> s.removeprefix("Foo")
'Bar' - uus parser (Parsing Expression Grammar), mis asendas parseri . Uue parseri kasutamine on vĂ”imaldanud vabaneda mĂ”ningatest "kettidest", mida on kasutatud LL(1) piirangute ĂŒletamiseks, ja oluliselt vĂ€hendada parseri hooldamise koormust. Uue parseri jĂ”udlus on ligikaudu sama, mis eelmisel, kuid see on oluliselt paindlikum, mis vĂ”imaldab uute keelevĂ”imaluste projekteerimisel vabamalt tunda. Vanem parser on siiski sĂ€ilinud ja selle saab aktiveerida, kasutades lippu "-X oldparser" vĂ”i keskkonnamuutujat "PYTHONOLDPARSER=1", kuid see eemaldatakse versioonis 3.10.
- vÔimalus C-laienduste meetodite juurdepÀÀsule moodulite olekule, kus need on mÀÀratletud, kasutades otseviidete dereferentseerimist, selle asemel et otsida mooduli olekut funktsiooni PyState_FindModule abil. Muudatus vÔimaldab suurendada C-moodulite jÔudlust, vÀhendades vÔi tÀielikult kÔrvaldades mooduli oleku kontrollimisega seotud kulusid. Mooduli klassiga seostamiseks on ette nÀhtud C-funktsioon PyType_FromModuleAndSpec(), mooduli ja selle oleku saamiseks C-funktsioonid PyType_GetModule() ja PyType_GetModuleState(), ning meetodi juurdepÀÀsuks klassile, kus see on mÀÀratletud, C-funktsioon PyCMethod ja lipp METH_METHOD.
- PrĂŒgikoristus plokkidest, mis sisaldavad taastatud objekte, mis jÀÀvad pĂ€rast finalisaatori kĂ€ivitamist vĂ€ljastpoolt kĂ€ttesaadavaks.
- Lisatud meetod , mis vĂ”imaldab kasutada Linuxi tuuma "pidfd" alam sĂŒsteemi olukordade kĂ€sitlemiseks, kus PID-i uuesti kasutamine on vajalik (pidfd on seotud kindla protsessiga ja ei muutu, samas kui PID vĂ”ib pĂ€rast praeguse protsessi lĂ”petamist olla seotud teise protsessiga).
- Unicode spetsiifkatsioon on ajakohastatud versioonile 13.0.0.
- Korrigeeritud Python tĂ”lgendaja korduva initsialiseerimise korral ĂŒhes protsessis.
- Sisseehitatud tĂŒĂŒpide range, tuple, set, frozenset, list ja dict jĂ”udluse optimeerimine on Ă€ra tehtud Moodulid _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time ja _weakref on ĂŒle viidud laadimisele
- mitmeastmelise initsialiseerimisega .
- stabiilne ABI Moodulis asyncio on potentsiaalsete turvaprobleemide tĂ”ttu lĂ”petatud parameetri reuse_address toetamine (SO_REUSEADDR kasutamine UDP jaoks Linuxis vĂ”imaldab erinevatel protsessidel ĂŒhenduda kuulamis soketitega UDP-pordile).
- Modulis asyncio on peatatud reuse_address parameetri tugi (SO_REUSEADDR kasutamine UDP jaoks Linuxis vĂ”imaldab erinevatel protsessidel ĂŒhendada kuulamis sokette UDP-pordile) potentsiaalsete turvaprobleemide tĂ”ttu.
- Uued optimeerimised on lisatud, nĂ€iteks on tĂ”hustatud signaalitöötlejate jĂ”udlust mitme lĂ”imega rakendustes, subprocess-mooduli töökiirus FreeBSD keskkonnas on suurenenud ja ajutiste muutujate mÀÀramine on kiirem (muutuja mÀÀramine vĂ€ljendis âfor y in [expr]â ei jÀÀ enam alla vĂ€ljendile ây = exprâ). Ăldiselt nĂ€itavad enamik teste jĂ”udlust vĂ”rreldes 3.8 haruga (kiirusetĂ”us on tĂ€heldatud ainult write_local ja write_deque testides):
Python versioon 3.4 3.5 3.6 3.7 3.8 3.9
âââââ â â â â â âMuutuja ja atribuutide lugemise juurdepÀÀs:
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.9Muutuja ja atribuutide kirjutamise juurdepÀÀs:
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
write_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.7Andmestruktuuri lugemise juurdepÀÀs:
read_list 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.6Andmestruktuuri kirjutamise juurdepÀÀs:
write_list 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
write_dict 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.8Virna (vÔi jÀrjekorra) toimingud:
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.5Aja tsĂŒkkel:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3 - Paljusid Python 2.7 funktsioone ja meetodeid, mis olid varem markeeritud kui aegunud ja viimases vÀljaandes pÔhjustasid DeprecationWarningi, sealhulgas meetod unescape() html.parser.HTMLParseris,
tostring() ja fromstring() array.array'is, isAlive() threading.Thread'is, getchildren() ja getiterator() ElementTree's, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() ja base64.decodestring().
Allikas: opennet.ru
