PĂ€rast aastat arendust tĂ€htis programmeerimiskeele vĂ€ljalaskmine . Python 3.9 on esimene vĂ€ljalaskmine pĂ€rast projekti vĂ€ljalaskmise ettevalmistamiseks ja toetamiseks. Uued olulised vĂ€ljalasked tehakse nĂŒĂŒd kord aastas, samas kui paranduste uuendused ilmuvad iga kahe kuu tagant. Iga tĂ€htis haru toetatakse poolteist aastat, millele jĂ€rgneb veel kolm ja pool aastat turvaaukude parandamiseks.
Uue haru töö algab nĂŒĂŒd viis kuud enne jĂ€rgmise haru vĂ€ljalaskmist, st samaaegselt Python 3.9 vĂ€ljalaskmisega Python 3.10 haru alpha-testimine. Python 3.10 haru on alpha-vĂ€ljal, mis kestab seitse kuud, mille jooksul lisatakse uusi funktsioone ja parandatakse tĂ”rkeid. SeejĂ€rel toimub kolme kuu jooksul beetaversioonide testimine, mille kĂ€igus uusi funktsioone ei lubata ja kogu tĂ€helepanu suunatakse tĂ”rgete parandamisele. Viimased kaks kuud enne vĂ€ljalaset on haru kandidaadi versiooni staatuses, mille jooksul toimub lĂ”plik stabiliseerimine.
Pythonis 3.9:
- SĂ”naraamatutes, mis on mÀÀratud sisseehitatud klassi dict abil, toetatakse ĂŒhendamisoperaatoreid «|» ja uuendamisoperaatoreid «|=», mis tĂ€iustavad meetodeid {**d1, **d2} ja dict.update, mis varem pakkusid sĂ”naraamatute ĂŒ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 list, dict ja tuple, mida saab kasutada pĂ”hihĂ€lvetena ilma typing moodulist impordita. See tĂ€hendab, et typing.List, typing.Dict ja typing.Tuple asemel vĂ”ib nĂŒĂŒd mĂ€rkida lihtsalt
list, dict ja tuple:def greet_all(names: list[str]) -> None:
for name in names:
print("Hello", name) - paindlikke vahendeid funktsioonide ja muutujate annotatsioonide lisamiseks. Annotatsioonide sidumiseks on typing moodulisse lisatud uus tĂŒĂŒp Annotated, mis laiendab olemasolevaid tĂŒĂŒpe lisanduvate metaandmetega, mida saab kasutada staatilises analĂŒĂŒsis vĂ”i kĂ€itamise ajal optimeerimiseks. Metaandmete saamiseks koodist on meetodisse typing.get_type_hints() lisatud parameeter include_extras.
charType = Annotated[int, ctype("char")]
UnsignedShort = Annotated[int, struct2.ctype('H')] - grammatika nĂ”uded dekoratooride suhtes â ĂŒkskĂ”ik milline vĂ€ljend, mis sobib if ja while plokkides kasutamiseks, vĂ”ib nĂŒĂŒd olla dekoratoorina kasutatud. Muudatus on oluliselt parandanud PyQt5 koodi loetavust ja lihtsustanud selle mooduli hooldust:
Oli:
button_0 = buttons[0]
@button_0.clicked.connectNĂŒĂŒd vĂ”ib kirjutada:
@buttons[0].clicked.connect - Standardraamatukogus mooduli , 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'>>> # Standardaeg
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00>>> print(dt.tzname())
PST - Lisatud on graphlib moodul, milles toetatakse graafide topoloogilist sortimist.
- uued meetodid stringide prefixide ja suffixide 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 parser'i kasutuselevĂ”tt on vĂ”imaldanud loobuda teatud âtrikkidestâ, mis olid kasutusel LL(1) piirangute ĂŒletamiseks, ning oluliselt vĂ€hendanud parseri hoolduskulusid. Uue parseri jĂ”udlus on enam-vĂ€hem sama, mis eelmisel, kuid see ĂŒletab seda oluliselt paindlikkuse osas, mis vĂ”imaldab vabamalt uusi keele vĂ”imalusi kavandada. Vana parseri kood on praegu sĂ€ilitatud ja selle saab taastada, kasutades lippu â-X oldparserâ vĂ”i keskkonnamuutujat âPYTHONOLDPARSER=1â, kuid see eemaldatakse versioonis 3.10.
- C-extensions access to the state of the modules in which they are defined, using direct dereferencing of pointers instead of searching the module state with the PyState_FindModule function. The change increases the performance of C modules by reducing or completely eliminating the overhead of verifying the module state. A C function PyType_FromModuleAndSpec() is proposed to associate the module with the class, C functions PyType_GetModule() and PyType_GetModuleState() for retrieving the module and its state, and the C function PyCMethod and the METH_METHOD flag to provide the method access to the class in which it is defined.
- KÔrvalvÀrvide kogu from collection locks involving resurrected objects that remain accessible from outside after the finalizer has run.
- Uus meetod , enabling the use of the Linux kernel subsystem "pidfd" to handle the situation of PID reuse (pidfd is linked to a specific process and does not change, while the PID can be bound to another process after the current process associated with this PID has finished).
- Unicode spetsiifikatsioon on uuendatud versioonile 13.0.0.
- Eemaldatud Python tĂ”lgendi korduva alglaadimise korral ĂŒhe protsessi sees.
- On toimunud tĂ€iendav optimeerimine sisseehitatud tĂŒĂŒpide jaoks nagu range, tuple, set, frozenset, list ja dict, Vectorcalli kiire kĂ”neprotokolli kasutamise kaudu, et objekti, mis on kirjutatud C keeles, hĂ”lpsasti kĂ€tte saada.
- Moodulid _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time ja _weakref on ĂŒmber suunatud laadimisele .
- Standardraamatukogu moodulid audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios ja zlib on muudetud kasutama piiratud , mis lahendab probleemid moodulite laienduste töökindluse osas erinevate Python versioonide jaoks (versiooniuuenduse korral ei pea mooduleid uuesti kompileerima ning 3.9 jaoks kompileeritud moodulid saavad töötada 3.10 harudes).
- Moodulis asyncio on vÔimalikest turvariskidest tulenevalt peatatud reuse_address parameetri tugi (SO_REUSEADDR kasutamine UDP jaoks Linuxis lubab erinevatel protsessidel siduda kuulamis sokke UDP-porti).
- Uued optimeerimised funktsioonid, sealhulgas on paranenud signaalide töötlemise jĂ”udlus mitme lĂ”imega rakendustes, subprocess mooduli kiirus FreeBSD keskkonnas on suurenenud ning ajutiste muutujate mÀÀramine on kiirem (muutuja mÀÀramine vĂ€ljendis âfor y in [expr]â on nĂŒĂŒd jĂ”udluses samal tasemel nagu ây = exprâ). Ăldiselt nĂ€itavad enamiku testide tulemused vĂ”rreldes 3.8 haruga (kiirus paraneb ainult write_local ja write_deque testides):
Python versioon 3.4 3.5 3.6 3.7 3.8 3.9
âââââ â â â â â âMuutuja ja atribuudi lugemise juurde pÀÀ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 atribuudi kirjutamise juurde pÀÀ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.7Andmete struktuuri lugemisjuurdepÀÀ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.6Andmete struktuuri kirjutamisjuurdepÀÀ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.8Stacki (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 mÔÔtmine:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3 - paljusid funktsioone ja meetodeid Python 2.7, mis olid varem mÀrgitud kui vananenud ja mille eelnevas vÀljaandes oli seotud DeprecationWarning'i teade, sealhulgas meetod unescape() html.parser.HTMLParser'is,
tostring() ja fromstring() array.array'is, isAlive() threading.Thread'is, getchildren() ja getiterator() ElementTree'is, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() ja base64.decodestring().
Allikas: opennet.ru
