Ukukhutshwa kolwimi lwenkqubo lwePython 3.9

Emva konyaka wophuhliso thaca ukukhutshwa kolwimi lwenkqubo ebalulekileyo Python 3.9. I-Python 3.9 yayiyeyokuqala ukukhululwa emva utshintsho projekthi kwi umjikelo omtsha ukulungiswa kunye nenkxaso yokukhutshwa. Ukukhutshwa okukhulu okutsha ngoku kuya kwenziwa kube kanye ngonyaka, kwaye uhlaziyo lolungiso luya kukhutshwa rhoqo kwiinyanga ezimbini. Isebe ngalinye elibalulekileyo liya kuxhaswa kangangonyaka onesiqingatha, kuze emva koko kuphuhliswe eminye iminyaka emithathu enesiqingatha ukuze lilungise ubuthathaka.

Umsebenzi kwisebe elitsha ngoku uqalisa kwiinyanga ezintlanu ngaphambi kokukhululwa kwesebe elilandelayo, okt. ngokuhambelana nokukhutshwa kwePython 3.9 waqala Uvavanyo lwealpha lwePython 3.10 yesebe. Isebe lePython 3.10 liya kuba kukukhutshwa kwe-alpha kangangeenyanga ezisixhenxe, apho izinto ezintsha ziya kongezwa kwaye iziphene zilungiswe. Emva koku, iinguqulelo ze-beta ziya kuvavanywa iinyanga ezintathu, apho ukongeza amanqaku amatsha kuya kuthintelwa kwaye yonke ingqalelo iya kuhlawulwa ukulungisa iziphene. Kwiinyanga ezimbini zokugqibela ngaphambi kokukhululwa, isebe liya kuba likwinqanaba lokukhululwa, apho kuya kwenziwa uzinzo lokugqibela.

Phakathi yongezwe ezintsha kwiPython 3.9:

  • Kwizichazi-magama ezichazwe kusetyenziswa iklasi ye-dict eyakhelwe-ngaphakathi, yavela inkxaso yokudibanisa abasebenzi "|" kunye "|=" nohlaziyo, oluxhasa i- {**d1, **d2} kunye ne-dict.hlaziya iindlela ezicetyiweyo ngaphambili zokudityaniswa kwezichazi-magama.

    >>> x = {"isitshixo1": "ixabiso1 ukusuka ku-x", "isitshixo2": "ixabiso2 ukusuka ku-x"}
    >>> y = {"isitshixo2": "ixabiso2 ukusuka ku-y", "isitshixo3": "ixabiso3 ukusuka ku-y"}

    >>> x | y
    {'isitshixo1': 'ixabiso1 ukusuka ku-x', 'isitshixo2': 'ixabiso2 ukusuka ku-y', 'isitshixo3': 'ixabiso3 ukusuka ku-y'}

    >>> yi | x
    {'isitshixo2': 'ixabiso2 ukusuka ku-x', 'isitshixo3': 'ixabiso3 ukusuka ku-y', 'isitshixo1': 'ixabiso1 ukusuka ku-x'}

  • Ingqokelela eyakhelwe-ngaphakathi yeentlobo ibandakanya uluhlu, i-dict, kunye ne-tuple, enokusetyenziswa njengeentlobo zesiseko ngaphandle kokungenisa kwimodyuli yokuchwetheza. Ezo. endaweni yokuchwetheza.Uluhlu, chwetheza.Dict kunye nokuchwetheza.Tuple ongayichaza ngoku
    dwelisa nje, dict kunye ne-tuple:

    def greet_all(amagama: uluhlu[str]) -> Akukho:
    kwigama emagameni:
    print("Molo", igama)

  • Zibonelelwe izixhobo eziguquguqukayo zemisebenzi yochazo kunye neenguqu. Ukufakela ama-annotations, uhlobo olutsha lwe-Annotated longezwe kwimodyuli yokuchwetheza, ukwandisa iintlobo ezikhoyo kunye nemethadatha eyongezelelweyo engasetyenziselwa uhlalutyo lwe-static okanye ukulungiswa kwexesha lokugijima. Ukufikelela kwimetadata kwikhowudi, i- include_extras parameter yongezwe kwindlela yokuchwetheza.get_type_hints().

    charType = Annotated[int, ctype("char")] UnsignedShort = Annotated[int, struct2.ctype('H')]

  • Ithoniwe phantsi iimfuno zegrama kubahombisi - nayiphi na intetho elungele ukusetyenziswa ukuba kwaye ngelixa iibhloko ngoku zingasetyenziswa njengomhombi. Utshintsho luphucule kakhulu ukufundeka kwekhowudi yePyQt5 kwaye lwenza lula ukugcinwa kwale modyuli:

    Yayiyi:
    button_0 = amaqhosha[0] @button_0.clicked.connect

    Ngoku ungabhala:
    @amaqhosha[0].clicked.connect

  • Kwithala leencwadi elisemgangathweni yongezwa imodyuli indawo, ebandakanya ulwazi oluvela kwindawo yedatha ye-IANA yendawo yexesha.

    >>> ukusuka zoneinfo yokungenisa ZoneInfo
    >>> ukusuka kwixesha lokungenisa ngexesha, ixesha le-timedelta
    >>> # Ixesha lasehlotyeni
    >>> dt = ixesha (2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> shicilela (dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'I-PDT'

    >>> # Ixesha eliqhelekileyo
    >>> dt += timedelta(iintsuku=7)
    >>> shicilela (dt)
    2020-11-07 12:00:00-08:00

    >>> shicilela (dt.tzname ())
    i-PST

  • Imodyuli eyongeziweyo yegraphlib, apho iphunyeziwe inkxaso yokuhlela kakuhle iigrafu.
  • Icetywayo iindlela ezintsha zokususa izimaphambili kunye neziphelo zomgca - str.removeprefix(isiqalo) kunye ne-str.removesuffix(umamva). Iindlela zongezwe kwi-str, bytes, bytearray kunye neengqokelela.UserString objects.

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'Ibha'

  • Ibandakanyiwe umchasi omtsha PEG (I-Parsing Expression Grammar), ethathe indawo yesicazululi LL(1). Ukusetyenziswa kwesicazululi esitsha kwenze ukuba kube lula ukususa ezinye "ii-hacks" ezisetyenziselwa ukudlula izithintelo kwi-LL (1), kwaye zanciphisa kakhulu iindleko zabasebenzi zokugcina isahluli. Ngokubhekiselele kwindlela yokusebenza, isicazululi esitsha siphantse sibe kumgangatho ofanayo nowangaphambili, kodwa siphambi kwawo ngokuphawulekayo ngokuguquguquka, okukuvumela ukuba uzive ukhululekile xa uyila iimpawu zolwimi olutsha. Ikhowudi endala yokwahlulahlula igcinwa okwangoku kwaye inokubuyiselwa kusetyenziswa iflegi ethi "-X oldparser" okanye "PYTHONOLDPARSER=1" ukuguquguquka kwemekobume, kodwa iya kususwa ekukhutshweni kwe-3.10.
  • Kubonelelwe amandla eendlela zokwandiswa kwe-C ukufikelela kwimeko yeemodyuli apho zichazwe khona ngokusebenzisa isalathisi esithe ngqo endaweni yokukhangela imeko yemodyuli usebenzisa umsebenzi wePyState_FindModule. Utshintsho lukuvumela ukuba ukwandise ukusebenza kweemodyuli ze-C ngokunciphisa okanye ukuphelisa ngokupheleleyo i-overhead yokujonga imeko yemodyuli. Ukunxulumanisa imodyuli neklasi, i-C-function PyType_FromModuleAndSpec () iyacetywa, ukufumana imodyuli kunye nesimo sayo, i-C-functions PyType_GetModule () kunye ne-PyType_GetModuleState () zindululiwe, kunye nokubonelela ngendlela yokufikelela eklasini. apho ichazwa khona, i-C-function PyCMethod kunye ne-METH_METHOD iflegi iyacetywa.
  • Umqokeleli wenkunkuma zisiwe ukusuka kwiingqokelela zokutshixa eziqulethe izinto ezivuselelweyo ezihlala zifikeleleka ngaphandle emva kokuba umgqibeli eqhuba.
  • Indlela eyongeziweyo os.pidfd_vula, evumela i-Linux kernel subsystem "pidfd" ukuba isetyenziswe ukuphatha imeko yokusetyenziswa kwakhona kwe-PID (pidfd inxulunyaniswe nenkqubo ethile kwaye ayitshintshi, ngelixa i-PID inokudityaniswa nenye inkqubo emva kokuba inkqubo yangoku edityaniswa naloo PID iphelisa. ).
  • Inkxaso yenkcazo ye-Unicode ihlaziywe kwinguqulo ye-13.0.0.
  • Iphelisiwe ukuvuza kwenkumbulo xa kuqaliswa kwakhona itoliki yePython kwinkqubo efanayo.
  • Ukusebenza koluhlu lweentlobo ezakhelwe ngaphakathi, i-tuple, isethi, i-frozenset, uluhlu kunye ne-dict iye yalungiswa. iphunyeziwe ngokusebenzisa indlela emfutshane yeVectorcall yokufikelela ngokukhawuleza kwizinto ezibhalwe ngolwimi lweC.
  • Iimodyuli _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, ixesha kunye _weakref zilayishwa ukusuka ukuqaliswa ngokwamanqanaba amaninzi.
  • Iimodyuli zethala leencwadi eziqhelekileyo audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, khetha, struct, termios kunye nezlib ziguqulelwe ukuba zisebenzise umda. I-ABI ezinzileyo, esisombulula ingxaki yokusebenza kweendibano zeemodyuli zokwandiswa kweenguqu ezahlukeneyo zePython (xa uhlaziywa inguqu, akukho mfuneko yokuvuselela iimodyuli zokwandisa, kunye neemodyuli ezihlanganiswe kwi-3.9 ziya kukwazi ukusebenza kwisebe le-3.10).
  • Imodyuli ye-asyncio ihoxisiwe inkxaso yeparamitha yedilesi kwakhona ngenxa yemibandela yokhuseleko enokwenzeka (usebenzisa i-SO_REUSEADDR ye-UDP kwi-Linux ivumela iinkqubo ezahlukeneyo ukuba zifake iisokethi zokumamela kwi-port ye-UDP).
  • Ukulungiswa okutsha kongeziweyo, umzekelo, ukuphuculwa kwentsebenzo yabaphathi beempawu kwizicelo ezinemisonto emininzi, isantya esongeziweyo semodyuli ye-subprocess kwindawo ye-FreeBSD, kunye nokunikezelwa ngokukhawuleza kwezinto eziguquguqukayo zexeshana (ukunika ukuguquguquka kwintetho "ye-y in [expr ]” ngoku idlala njengo “y = expr” "). Ngokubanzi, iimvavanyo ezininzi bonisa ukwehla komsebenzi xa kuthelekiswa nesebe 3.8 (ukukhawuleza kujongwa kuphela kwiimvavanyo ze-writ_local and write_deque):

    Uguqulelo lwePython 3.4 3.5 3.6 3.7 3.8 3.9
    ———————————

    Ukufikelela kokufunda okuguquguqukayo kunye nophawu:
    funda_engingqi 7.1 7.1 5.4 5.1 3.9 4.0
    funda_engekho 7.1 8.1 5.8 5.4 4.4 4.8
    funda_ihlabathi jikelele 15.5 19.0 14.3 13.6 7.6 7.7
    funda_isakhiwo 21.1 21.6 18.5 19.0 7.5 7.7
    funda_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
    funda_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
    funda_umzekelo 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
    funda_igama thuple 73.8 57.5 45.0 46.8 18.4 23.2
    funda_indlela yomda 37.6 37.9 29.6 26.9 27.7 45.9

    Ufikelelo lokubhala oluguquguqukayo kunye nophawu:
    bhala_engingqi 8.7 9.3 5.5 5.3 4.3 4.2
    bhala_engekho 10.5 11.1 5.6 5.5 4.7 4.9
    bhala_ihlabathi jikelele 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
    bhala_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

    Ufikelelo lokufunda ubume bedatha:
    funda_uluhlu 24.2 24.5 20.8 20.8 19.0 21.1
    funda_deque 24.7 25.5 20.2 20.6 19.8 21.6
    funda_umyalelo 24.3 25.7 22.3 23.0 21.0 22.5
    funda_umqathango 22.6 24.3 19.5 21.2 18.9 21.6

    Ufikelelo lokubhala ubume bedatha:
    bhala_uluhlu 27.1 28.5 22.5 21.6 20.0 21.6
    bhala_deque 28.7 30.1 22.7 21.8 23.5 23.2
    bhala_umyalelo 31.4 33.3 29.3 29.2 24.7 27.8
    bhala_umyalelo 28.4 29.9 27.5 25.2 23.1 29.8

    Ukupakisha (okanye umgca) imisebenzi:
    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.5

    Ixesha lexesha:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Isusiwe imisebenzi emininzi yePython 2.7 kunye neendlela eziye zayekiswa ngaphambili kwaye zakhokelela kwiSilumkiso sokuDeprecation kukhupho lwangaphambili, ukuquka indlela ye- unescape() kwi-html.parser.HTMLParser,
    umtya () kunye nokusuka kumtya () kuluhlu. asyncio.Task.all_tasks(), base64.encodestring() kunye ne-base64.decodestring().

umthombo: opennet.ru