Sakin yaren shirye-shiryen Python 3.9

Bayan shekara guda na ci gaba gabatar gagarumin sakin harshe na shirye-shirye Python 3.9. Python 3.9 shine farkon sakin bayan miƙa mulki aikin a sabon zagayowar shirye-shirye da goyon bayan sakewa. Yanzu za a samar da sabbin manyan fitowar sau ɗaya a shekara, kuma za a fitar da sabuntawar gyara kowane wata biyu. Kowane reshe mai mahimmanci za a tallafa masa na tsawon shekara ɗaya da rabi, bayan haka kuma za a ƙara haɓaka wasu shekaru uku da rabi don gyara rashin lahani.

Aiki a kan sabon reshe yanzu yana farawa watanni biyar kafin a saki reshe na gaba, watau. yayi daidai da sakin Python 3.9 ya fara gwajin alpha na reshen Python 3.10. Reshen Python 3.10 zai kasance cikin sakin alpha har tsawon watanni bakwai, yayin da za a ƙara sabbin abubuwa da gyara kwari. Bayan wannan, za a gwada nau'ikan beta na tsawon watanni uku, yayin da za a hana ƙara sabbin abubuwa kuma za a biya dukkan hankali ga gyara kurakurai. Watanni biyu da suka gabata kafin a saki, reshen zai kasance a matakin ɗan takara na saki, inda za a yi kwanciyar hankali na ƙarshe.

Daga cikin kara da cewa sababbin abubuwa a cikin Python 3.9:

  • A cikin ƙamus da aka ayyana ta amfani da ginanniyar ajin dict, ya bayyana goyan baya ga masu aikin haɗin gwiwa "|" da "|=" sabuntawa, waɗanda suka dace da {**d1, **d2} da dict.update hanyoyin da aka tsara a baya don haɗa ƙamus.

    >>> x = {"key1": "darajar1 daga x", "key2": "darajar2 daga x"}
    >>> y = {"key2": "darajar2 daga y", "key3": "darajar3 daga y"}

    >>> x | y
    {'key1': 'darajar1 daga x', 'key2': 'darajar2 daga y', 'key3': 'darajar3 daga y'}

    >>> y | x
    {'key2': 'darajar2 daga x', 'key3': 'darajar 3 daga y', 'key1': 'daraja1 daga x'}

  • Tarin nau'ikan da aka gina a ciki ya haɗa da jeri, dict, da tuple, waɗanda za a iya amfani da su azaman nau'ikan tushe ba tare da shigo da su daga tsarin buga rubutu ba. Wadancan. maimakon bugawa.List, buga.Dict da bugawa.Tuple zaka iya tantancewa yanzu
    kawai lissafin, dict da tuple:

    def greet_all (sunaye: list[str]) -> Babu:
    don suna a cikin sunaye:
    buga ("Hello", suna)

  • Ana bayarwa kayan aikin sassauƙa don bayyana ayyuka da masu canji. Don haɗa bayanai, an ƙara sabon nau'in Annotated zuwa tsarin rubutu, yana faɗaɗa nau'ikan da ke akwai tare da ƙarin metadata waɗanda za'a iya amfani da su don tantancewa a tsaye ko don inganta lokacin gudu. Don samun damar metadata daga lamba, an ƙara ma'aunin sun haɗa da_extras zuwa hanyar typing.get_type_hints().

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

  • Sautin ƙasa Bukatun nahawu don masu ado - duk wata magana da ta dace don amfani a cikin idan da kuma yayin da tubalan za a iya amfani da su azaman kayan ado. Canjin ya inganta ingantaccen karanta lambar PyQt5 kuma ya sauƙaƙa kiyaye wannan tsarin:

    Ya kasance:
    button_0 = maɓalli[0] @button_0.clicked.connect

    Yanzu zaku iya rubuta:
    @buttons[0].latsa.connect

  • Zuwa daidaitaccen ɗakin karatu ya kara da cewa koyaushe sashininfo, wanda ya haɗa da bayanai daga bayanan yankin lokaci na IANA.

    >>> daga zoneinfo shigo da ZoneInfo
    >>> daga lokacin shigo da kwanan wata, timedelta
    >>> # Lokacin bazara
    >>> dt = kwanan wata (2020, 10, 31, 12, tzinfo=ZoneInfo("Amurka/Los_Angeles"))
    >>> buga (dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # daidaitaccen lokaci
    >>> dt += timedelta(kwanaki=7)
    >>> buga (dt)
    2020-11-07 12:00:00-08:00

    >>> buga (dt.tzname())
    PST

  • Ƙara graphlib module, wanda a ciki aiwatar goyon baya ga topological jeri jadawali.
  • An gabatar sababbin hanyoyin cire prefixes da ƙarshen layi - str.removeprefix (prefix) da str.removesuffix (suffix). An ƙara hanyoyin zuwa str, bytes, bytearray da tarin abubuwa.UserString abubuwa.

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

  • Shiga sabon parser fegi (Parsing Expression Grammar), wanda ya maye gurbin parser LL (1). Yin amfani da sabon parser ya ba da damar kawar da wasu daga cikin "hacks" da aka yi amfani da su don ƙetare hane-hane a cikin LL(1), kuma ya rage mahimmancin farashin aiki don kiyaye parser. Dangane da aiki, sabon parser yana kusan daidai da matakin da ya gabata, amma yana da mahimmanci a gabansa dangane da sassauci, wanda ke ba ku damar jin daɗi yayin zayyana sabbin fasalolin harshe. Tsohuwar lambar parser ɗin tana riƙe da ita a yanzu kuma ana iya dawo da ita ta amfani da tutar "-X oldparser" ko "PYTHONOLDPARSER=1" mai canjin yanayi, amma za'a cire shi a cikin sakin 3.10.
  • An bayar iyawar hanyoyin tsawaita C don samun damar yanayin abubuwan da aka bayyana a cikin su ta amfani da ɓatanci mai nuna kai tsaye maimakon neman yanayin yanayin ta amfani da aikin PyState_FindModule. Canjin yana ba ku damar haɓaka ayyukan samfuran C ta hanyar ragewa ko kawar da kan gaba na duba yanayin tsarin. Don haɗa module tare da aji, ana ba da shawarar C-aikin PyType_FromModuleAndSpec(), don samun tsarin da yanayinsa, C-ayyukan PyType_GetModule () da PyType_GetModuleState () an ba da shawarar, kuma don samar da hanya tare da samun damar shiga aji. A cikin abin da aka ayyana shi, an ƙaddamar da PyCMethod na C-aikin da tutar METH_METHOD. .
  • Mai tara shara isarwa daga ɗimbin ɗimbin ɗimbin abubuwa masu rayarwa waɗanda ke kasancewa a waje bayan na'urar gamawa ta gudana.
  • Hanyar da aka ƙara os.pidfd_bude, wanda ke ba da damar tsarin kernel na Linux "pidfd" da za a yi amfani da shi don kula da yanayin sake amfani da PID (pidfd yana da alaƙa da takamaiman tsari kuma baya canzawa, yayin da PID za a iya haɗa shi da wani tsari bayan tsarin na yanzu da ke hade da PID ɗin ya ƙare. ).
  • An sabunta goyan bayan ƙayyadaddun Unicode zuwa sigar 13.0.0.
  • An kawar ƙwaƙwalwar ajiya lokacin sake kunna fassarar Python a cikin tsari iri ɗaya.
  • An inganta aikin ginannen nau'ikan kewayon, tuple, saiti, daskararru, jeri da dict an inganta su. aiwatar ta hanyar amfani da ka'idar gajeriyar hanyar Vectorcall don samun saurin shiga abubuwan da aka rubuta cikin yaren C.
  • Modules _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, afareta, albarkatun, lokaci da _weakref ana ɗora su daga farawa a matakai da yawa.
  • Madaidaitan samfuran ɗakin karatu na audioop, ast, grp, _hashlib, pwd, _posixsubprocess, bazuwar, zaɓi, tsari, termios da zlib an canza su don amfani da ƙuntatawa. kwanciyar hankali ABI, wanda ke magance matsalar aiki na majalissar na'urorin haɓakawa don nau'ikan Python daban-daban (lokacin sabunta sigar, babu buƙatar sake gina nau'ikan haɓakawa, kuma samfuran da aka haɗa don 3.9 za su iya yin aiki a cikin reshen 3.10).
  • Tsarin asyncio ya yanke tallafi don ma'aunin reuse_address saboda yuwuwar al'amurran tsaro (amfani da SO_REUSEADDR don UDP akan Linux yana ba da damar matakai daban-daban don haɗa saƙon sauraron zuwa tashar tashar UDP).
  • An ƙara sabbin haɓakawa, alal misali, ingantaccen aikin masu sarrafa sigina a cikin aikace-aikacen zaren da yawa, haɓaka saurin tsarin tsarin aiki a cikin yanayin FreeBSD, da saurin aiki na masu canji na wucin gadi (bayar da madaidaicin a cikin furci "don y in [expr] ]" yanzu yana aiki kamar "y = expr"). Gabaɗaya, yawancin gwaje-gwaje nuna raguwar aiki idan aka kwatanta da reshe na 3.8 (ana lura da saurin sauri kawai a cikin gwajin rubuta_local da rubuta_deque):

    Python version 3.4 3.5 3.6 3.7 3.8 3.9
    ———————————

    Mai canzawa da sifa samun damar karantawa:
    karanta_na gida 7.1 7.1 5.4 5.1 3.9 4.0
    karanta_na gida 7.1 8.1 5.8 5.4 4.4 4.8
    karanta_duniya 15.5 19.0 14.3 13.6 7.6 7.7
    karanta_builtin 21.1 21.6 18.5 19.0 7.5 7.7
    karanta_classvar_daga_aji 25.6 26.5 20.7 19.5 18.4 18.6
    karanta_classvar_daga_misali 22.8 23.5 18.8 17.1 16.4 20.1
    karanta_lokaci 32.4 33.1 28.0 26.3 25.4 27.7
    read_intancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    karanta_suna 73.8 57.5 45.0 46.8 18.4 23.2
    Hanyar karantawa 37.6 37.9 29.6 26.9 27.7 45.9

    Canje-canje da sifa samun damar rubutawa:
    rubuta_na gida 8.7 9.3 5.5 5.3 4.3 4.2
    rubuta_non gida 10.5 11.1 5.6 5.5 4.7 4.9
    rubuta_duniya 19.7 21.2 18.0 18.0 15.8 17.2
    rubuta_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    rubuce-rubuce 44.6 45.8 40.0 38.9 35.5 40.7
    rubuta_intancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Hanyar karanta tsarin bayanai:
    karanta_jerin 24.2 24.5 20.8 20.8 19.0 21.1
    karanta_deque 24.7 25.5 20.2 20.6 19.8 21.6
    Karatun Littafin 24.3 25.7 22.3 23.0 21.0 22.5
    karanta_shari'a 22.6 24.3 19.5 21.2 18.9 21.6

    Tsarin bayanai rubuta damar shiga:
    rubuta_list 27.1 28.5 22.5 21.6 20.0 21.6
    rubuta_deque 28.7 30.1 22.7 21.8 23.5 23.2
    rubuta 31.4 33.3 29.3 29.2 24.7 27.8
    rubuta 28.4 29.9 27.5 25.2 23.1 29.8

    Ayyukan tara (ko jerin gwano):
    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

    Madauki lokaci:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • An cire ayyuka da hanyoyin Python 2.7 da yawa waɗanda a baya aka yanke su kuma suka haifar da Gargaɗi a cikin sakin da ya gabata, gami da hanyar unescape() a cikin html.parser.HTMLParser,
    tostring () da kuma daga kirtani () a cikin array.array, isAlive () a cikin zaren.Thread, getchildren () da getiterator () a cikin ElementTree, sys.getcheckinterval (), sys.setcheckinterval (), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() da base64.decodestring().

source: budenet.ru

Add a comment