Efter ett Ärs utveckling betydande lansering av programmeringssprÄket . Python 3.9 blev den första versionen efter projektet till för beredning och underhÄll av versioner. Nya betydande versioner kommer nu att skapas en gÄng per Är, medan korrigerande uppdateringar kommer att slÀppas varannan mÄnad. Varje betydande gren kommer att stödjas i ett och ett halvt Är, varefter det kommer att skapas korrigeringar med sÀkerhetsfixar i tre och ett halvt Är.
Arbetet med den nya grenen börjar nu fem mÄnader före lanseringen av nÀsta gren, dvs. samtidigt som lanseringen av Python 3.9 alfa-testning av Python 3.10-grenen. Grenen Python 3.10 kommer att befinna sig i alfa-version under sju mÄnader, under vilka nya funktioner kommer att lÀggas till och buggar kommer att ÄtgÀrdas. Efter detta kommer betatestning att pÄgÄ under tre mÄnader, under vilken nya funktioner inte fÄr lÀggas till och allt fokus kommer att ligga pÄ att ÄtgÀrda buggar. De sista tvÄ mÄnaderna före lanseringen kommer grenen att befinna sig i releasekandidatstadiet, dÀr den slutliga stabiliseringen kommer att utföras.
i Python 3.9:
- I ordböcker som definieras med den inbyggda klassen dict, stöd för sammanfogningsoperatorerna "|" och uppdateringsoperatorerna "|=", som kompletterar metoderna {**d1, **d2} och dict.update, som tidigare föreslagits för att sammanfoga ordböcker.
>>> 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'} - Inbyggda samlingstyper inkluderar list, dict och tuple, som kan anvÀndas som grundtyper utan att importera frÄn modulen typing. Det vill sÀga att istÀllet för typing.List, typing.Dict och typing.Tuple kan man nu ange
bara list, dict och tuple:def greet_all(names: list[str]) -> None:
for name in names:
print("Hello", name) - flexibla verktyg för annotering av funktioner och variabler. För att bifoga annotationer har den nya typen Annotated lags till modulen typing, vilket utökar befintliga typer med ytterligare metadata som kan anvÀndas vid statisk analys eller för optimeringar under körning. För att fÄ tillgÄng till metadata frÄn koden har parametern include_extras lagts till metoden typing.get_type_hints().
charType = Annotated[int, ctype(«char»)]
UnsignedShort = Annotated[int, struct2.ctype(âHâ)] - Grammatiska krav pĂ„ dekoratorer â nu kan vilket uttryck som helst som Ă€r lĂ€mpligt för anvĂ€ndning i if- och while-block anvĂ€ndas som dekorator. Denna Ă€ndring har avsevĂ€rt förbĂ€ttrat lĂ€sbarheten i koden för PyQt5 och förenklat underhĂ„llet av denna modul:
Förut:
button_0 = buttons[0]
@button_0.clicked.connectNu kan man skriva:
@buttons[0].clicked.connect - I standardbiblioteket modul , som inkluderar information frÄn IANA:s tidszonsdatabas.
>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta
>>> # Sommartid
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo(«America\/Los_Angeles»))
>>> print(dt)
2020-10-31 12:00:00-07:00>>> dt.tzname()
âPDTâ>>> # Standardtid
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00>>> print(dt.tzname())
PST - Modulen graphlib har lagts till, som stödjer topologisk sortering av grafer.
- >>> s = «FooBar»
>>> s.removeprefix(«Foo»)
âBarâ
Implementerad - PEG LL(1) .
- möjlighet för C-extensioner att fĂ„ tillgĂ„ng till tillstĂ„ndet för de moduler de definieras i, med direkt dereferens av pekare istĂ€llet för att söka modulens tillstĂ„nd via funktionen PyState_FindModule. Ăndringen möjliggör ökad prestanda för C-moduler genom att minska eller helt utesluta overheadkostnader för att kontrollera modulens tillstĂ„nd. För att koppla en modul till en klass föreslĂ„s C-funktionen PyType_FromModuleAndSpec(), för att erhĂ„lla modulen och dess tillstĂ„nd C-funktionerna PyType_GetModule() och PyType_GetModuleState(), och för att tillhandahĂ„lla metoden tillgĂ„ng till klassen dĂ€r den definieras, C-funktionen PyCMethod och flaggan METH_METHOD.
- SkrÀpsamlaren frÄn att blockera insamlingar som inkluderar reanimerade objekt, som förblir tillgÀngliga utifrÄn efter att finalisatoren körts.
- Metod tillagd , som möjliggör anvÀndning av Linux-kÀrnans "pidfd"-subsystem för att hantera situationen med ÄteranvÀndning av PID (pidfd Àr kopplad till en specifik process och Àndras inte, medan PID kan knytas till en annan process efter avslutandet av den aktuella processen som Àr associerad med denna PID).
- Stödet för Unicode-specifikationen har uppdaterats till version 13.0.0.
- à tgÀrdad vid Äterinitiering av Python-tolken i en process.
- Prestanda för de inbyggda typerna range, tuple, set, frozenset, list och dict har optimerats, Modulerna _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time och _weakref har övergÄtt till att laddas med
- initialisering i flera steg. .
- stabil ABI I asyncio-modulen har stödet för parametern reuse_address upphört pÄ grund av potentiella sÀkerhetsproblem (anvÀndning av SO_REUSEADDR för UDP i Linux tillÄter olika processer att koppla lyssnande sockets till UDP-porten).
- I asyncio-modulen har stödet för parametern reuse_address upphört pÄ grund av potentiella sÀkerhetsproblem (anvÀndning av SO_REUSEADDR för UDP i Linux tillÄter olika processer att koppla lyssnande sockets till UDP-porten).
- Nya optimeringar har lagts till, till exempel har prestandan hos signalförhandlare i flerstĂ€mmiga applikationer förbĂ€ttrats, hastigheten för subprocess-modulen har ökat i FreeBSD-miljöer, och tilldelningen av tidsvariabler har snabbsats (tilldelning av variabel i uttrycket "for y in [expr]" Ă€r nu lika effektivt som uttrycket "y = expr"). Ăverlag har de flesta testerna visat en minskning av prestandan jĂ€mfört med version 3.8 (snabbheten observeras endast i testen write_local och write_deque):
Python-version 3.4 3.5 3.6 3.7 3.8 3.9
âââââ â â â â â âĂ tkomst till variabler och attribut:
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.9à tkomst för skrivning av variabler och attribut:
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.7à tkomst till datastrukturens lÀsning:
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.6à tkomst för skrivning av datastukturer:
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.8Stack (eller kö) operationer:
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.5Timing loop:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3 - mÄnga funktioner och metoder i Python 2.7 som tidigare markerats som förÄldrade och som i den senaste versionen gav ett DeprecationWarning, inklusive metoden unescape() i html.parser.HTMLParser,
tostring() och fromstring() i array.array, isAlive() i threading.Thread, getchildren() och getiterator() i ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() och base64.decodestring().
KĂ€lla: opennet.ru
