Sakin yaren shirye-shiryen Python 3.11

Bayan shekara guda na ci gaba, an buga mahimman sakin harshen shirye-shirye na Python 3.11. Za a tallafa wa sabon reshen na tsawon shekara daya da rabi, bayan haka kuma har tsawon shekaru uku da rabi, za a samar da gyare-gyare a gare shi don kawar da lahani.

A lokaci guda kuma, an fara gwajin alpha na reshen Python 3.12 (bisa ga sabon jadawalin ci gaba, aikin sabon reshe ya fara watanni biyar kafin a fito da reshen da ya gabata kuma ya kai matakin gwajin alpha a lokacin fitowa ta gaba. ). Reshen Python 3.12 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. A cikin watanni biyu na ƙarshe kafin a saki, reshe zai kasance a matakin ɗan takara na saki, inda za a yi kwanciyar hankali na ƙarshe.

Sabbin ƙari ga Python 3.11 sun haɗa da:

  • An yi gagarumin aiki don inganta aiki. Sabon reshe ya haɗa da canje-canje masu alaƙa da haɓakawa da ƙaddamar da layin layi na kiran ayyuka, amfani da masu fassarar sauri na daidaitattun ayyuka (x+x, x*x, xx, a[i], a[i] = z, f(arg) C (arg), o.method (), o.attr = z, * seq), kazalika da ingantawa da aka shirya ta ayyukan Cinder da HotPy. Dangane da nau'in kaya, ana samun karuwar saurin aiwatar da code na 10-60%. A matsakaita, aikin da aka yi akan rukunin gwajin pyperformance ya karu da kashi 25%.

    An sake fasalin tsarin caching bytecode, wanda ya rage lokacin farawa mai fassarar da kashi 10-15%. Abubuwan da ke da lamba da bytecode yanzu mai fassara ya keɓance su a kididdigewa, wanda ya ba da damar kawar da matakan da ba a taɓa gani ba daga ma'ajin da kuma canza abubuwa masu lamba don sanya su cikin ƙwaƙwalwar ajiya mai ƙarfi.

  • Lokacin nuna alamun kira a cikin saƙonnin bincike, yanzu yana yiwuwa a nuna bayanai game da furcin da ya haifar da kuskuren (a baya, layin kawai an yi alama ba tare da cikakken bayanin wane ɓangaren layin ya haifar da kuskure ba). Hakanan za'a iya samun ƙarin bayanan gano ta hanyar API kuma a yi amfani da su don taswirar umarnin bytecode ɗaya zuwa takamaiman matsayi a cikin lambar tushe ta amfani da hanyar codeobject.co_positions() ko aikin C API PyCode_Addr2Location(). Canjin yana sa ya zama mafi sauƙi don cire matsaloli tare da abubuwan ƙamus na gida, kiran ayyuka da yawa, da hadaddun maganganun lissafi. Komawa (kira na baya-bayan nan): Fayil "calculation.py", layi na 54, a sakamakon = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: Rarraba ta sifili
  • Ƙara goyon baya ga ƙungiyoyin keɓancewa, yana ba shirin ikon samarwa da aiwatar da keɓancewa daban-daban a lokaci ɗaya. Don haɗa keɓancewa da yawa da tara su tare, an gabatar da sabbin keɓance nau'ikan ExceptionGroup da BaseExceptionGroup, kuma an ƙara kalmar "ban da*" don haskaka keɓanta mutum ɗaya daga ƙungiya.
  • An ƙara hanyar add_note() zuwa ajin BaseException, yana ba ku damar haɗa bayanin rubutu zuwa banɗa, misali, ƙara bayanan mahallin da ba ya samuwa lokacin da aka jefa banda.
  • An ƙara nau'in Kai na musamman don wakiltar aji mai zaman kansa na yanzu. Ana iya amfani da kai don bayyana hanyoyin da ke dawo da misalin aji ta hanya mafi sauƙi fiye da amfani da TypeVar. class MyLock: def __shiga__(kai) -> Kai: kai. Kulle() mayar da kai
  • An ƙara nau'in LiteralString na musamman wanda zai iya haɗawa da ainihin kirtani kawai waɗanda suka dace da nau'in LiteralString (watau bare da kirtani na LiteralString, amma ba sabani ko haɗaɗɗen kirtani ba). Za a iya amfani da nau'in LiteralString don iyakance wucewar muhawarar kirtani zuwa ayyuka, maye gurbin sassa na kirtani na sabani wanda zai iya haifar da lahani, misali, lokacin samar da igiyoyi don tambayoyin SQL ko umarnin harsashi. def run_query (sql: LiteralString) -> ... ... def mai kira ( arbitrary_string: str, query_string: LiteralString, tebur_name: LiteralString, ) -> Babu: run_query ("Zabi * DAGA ɗalibai") # ok run_query (Literal_string) # ok run_query("Zabi * DAGA" + ainihin_string) # ok run_query(arbitrary_string) # Kuskuren run_query( # Kuskure f"Zabi * DAGA ɗalibai INA suna = {arbitrary_string}" )
  • An kara nau'in nau'in nau'in na zamani, ba da izinin amfani da kayan lafazin ba, ba kamar Typevar ba, wanda ya rufe nau'in nau'ikan abubuwa ɗaya, amma yawan nau'ikan sabani.
  • Daidaitaccen ɗakin karatu ya haɗa da tsarin tomlib tare da ayyuka don tantance tsarin TOML.
  • Yana yiwuwa a yi wa ɗaiɗaikun abubuwan ƙamus da aka buga (TypedDict) tare da alamun da ake buƙata da waɗanda ba a buƙata don tantance filayen da ake buƙata da zaɓin (ta tsohuwa, ana buƙatar duk filayen da aka bayyana idan ba a saita jimillar siga zuwa Ƙarya ba). class Movie(TypedDict): take: str year: NotRequired[int] m1: Fim = {" take": "Black Panther", "shekara": 2018} # Ok m2: Fim = {" take": "Star Wars" 3
  • An ƙara ajin TaskGroup zuwa tsarin asyncio tare da aiwatar da mai sarrafa mahallin asynchronous wanda ke jiran ƙungiyar ayyuka don kammalawa. Ana yin ƙara ayyuka zuwa ƙungiya ta amfani da hanyar ƙirƙirar_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(wasu_coro(...)) task2 = tg.create_task(wani_coro(...)) buga("Ayyukan biyu sun kammala yanzu .")
  • An ƙara @dataclass_transform decorator don azuzuwan, hanyoyi da ayyuka, lokacin da aka ƙayyade, tsarin duba nau'in a tsaye yana ɗaukar abu kamar yana amfani da @dataclasses.dataclass decorator. A cikin misalin da ke ƙasa, ajin CustomerModel, lokacin duba nau'ikan, za a sarrafa shi daidai da aji tare da @dataclasses.dataclass decorator, i.e. kamar samun hanyar __init__ mai karɓar id da masu canjin suna. @dataclass_transform() class ModelBase: … class CustomerModel(ModelBase): id: int name: str
  • A cikin maganganun yau da kullun, an ƙara ikon yin amfani da rukunin atomic ((?>...)) da ma'auni masu ma'ana (*+, ++, ?+, {m,n}+).
  • Ƙara zaɓin layin umarni na "-P" da PYTHONSAFEPATH madaidaicin mahallin don kashe haɗe-haɗe ta atomatik na hanyoyin fayil marasa aminci zuwa sys.path.
  • An inganta aikin py.exe na dandalin Windows, yana ƙara goyan baya ga ma'anar "-V:". / " ban da "- . "
  • Yawancin macros a cikin C API an canza su zuwa ayyukan layi na yau da kullun ko a tsaye.
  • The uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, snhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, da sunau modules an soke su kuma za a cire su a cikin Python. 3.13 saki. Cire ayyukan PyUnicode_Encode*.

source: budenet.ru

Add a comment