Paglabas ng Python 3.11 programming language

Pagkatapos ng isang taon ng pag-unlad, ang makabuluhang paglabas ng Python 3.11 programming language ay nai-publish. Ang bagong sangay ay susuportahan sa loob ng isa at kalahating taon, pagkatapos nito para sa isa pang tatlo at kalahating taon, ang mga pag-aayos ay bubuo para dito upang maalis ang mga kahinaan.

Kasabay nito, nagsimula ang pagsubok sa alpha ng sangay ng Python 3.12 (alinsunod sa bagong iskedyul ng pag-unlad, ang trabaho sa isang bagong sangay ay magsisimula limang buwan bago ang paglabas ng nakaraang sangay at umabot sa yugto ng pagsubok ng alpha sa oras ng susunod na paglabas ). Ang sangay ng Python 3.12 ay nasa alpha release sa loob ng pitong buwan, kung saan ang mga bagong feature ay idaragdag at ang mga bug ay maaayos. Pagkatapos nito, susuriin ang mga bersyon ng beta sa loob ng tatlong buwan, kung saan ang pagdaragdag ng mga bagong feature ay ipagbabawal at lahat ng atensyon ay ibibigay sa pag-aayos ng mga bug. Para sa huling dalawang buwan bago ang paglabas, ang sangay ay nasa yugto ng kandidato sa pagpapalabas, kung saan isasagawa ang panghuling pagpapapanatag.

Ang mga bagong karagdagan sa Python 3.11 ay kinabibilangan ng:

  • Nakumpleto na ang makabuluhang gawain sa pag-optimize ng pagganap. Kasama sa bagong sangay ang mga pagbabagong nauugnay sa pagpapabilis at inline na pagpapalawak ng mga function call, ang paggamit ng mga mabilis na interpreter para sa mga karaniwang operasyon (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), at mga pag-optimize na inihanda ng Cinder at HotPy project. Depende sa uri ng workload, ang bilis ng pagpapatupad ng code ay tumaas ng 10-60%. Sa karaniwan, ang performance kapag pinapatakbo ang pyperformance benchmark suite ay tumaas ng 25%.

    Ang mekanismo ng pag-cache ng bytecode ay muling idinisenyo, na binabawasan ang oras ng pagsisimula ng interpreter ng 10-15%. Ang mga object ng code at bytecode ay statically allocated na ngayon ng interpreter, na inaalis ang mga hakbang ng unmarshalling bytecode na nakuha mula sa cache at nagko-convert ng mga code object para sa dynamic na memory.

  • Kapag nagpapakita ng mga bakas ng tawag sa mga diagnostic na mensahe, ipinapakita na ngayon ang impormasyon tungkol sa expression na naging sanhi ng error (dati, ang linya lang ang na-highlight nang hindi nagdedetalye kung aling bahagi ng linya ang naging sanhi ng error). Ang pinalawak na impormasyon ng bakas ay maaari ding makuha sa pamamagitan ng API at ginagamit upang i-map ang mga indibidwal na tagubilin ng bytecode sa isang partikular na posisyon sa source code gamit ang codeobject.co_positions() na pamamaraan o ang C API function na PyCode_Addr2Location(). Ang pagbabagong ito ay makabuluhang pinapasimple ang mga isyu sa pag-debug na nauugnay sa mga nested na object ng diksyunaryo, maraming function na tawag, at kumplikadong mga expression ng aritmetika. Traceback (huling huling tawag): File "calculation.py", linya 54, sa resulta = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
  • Naidagdag ang suporta para sa mga exception group, na nagpapahintulot sa program na bumuo at humawak ng maramihang iba't ibang exception nang sabay-sabay. Ang mga bagong uri ng exception, ExceptionGroup at BaseExceptionGroup, ay magagamit para sa pagpapangkat ng maramihang mga exception at pagtataas ng mga ito nang sama-sama, at ang "except*" na expression ay idinagdag para sa pagpili ng mga indibidwal na exception mula sa isang grupo.
  • Ang paraan ng add_note() ay idinagdag sa klase ng BaseException, na nagbibigay-daan sa iyong mag-attach ng text note sa isang exception, halimbawa para magdagdag ng impormasyon sa konteksto na hindi available noong itinapon ang exception.
  • Ang isang espesyal na uri, Sarili, na kumakatawan sa kasalukuyang saradong klase ay naidagdag. Maaaring gamitin ang sarili upang i-annotate ang mga pamamaraan na nagbabalik ng isang instance ng klase nito, nang mas madali kaysa sa paggamit ng TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • May idinagdag na espesyal na uri ng LiteralString na maaari lamang maglaman ng mga literal na string na tugma sa uri ng LiteralString (ibig sabihin, mga walang laman na string at mga string ng uri ng LiteralString, ngunit hindi arbitrary o pinagsamang mga string ng uri ng str). Maaaring gamitin ang uri ng LiteralString upang paghigpitan ang pagpasa ng mga argumento ng string sa mga function, kung saan ang arbitraryong pagpapalit ng mga bahagi ng string ay maaaring humantong sa mga kahinaan, halimbawa, kapag bumubuo ng mga string para sa mga query sa SQL o shell command. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Wala: run_query("PUMILI * MULA sa mga mag-aaral") # ok run_query(literal_string) # ok run_query("__ *query) # ok run_query("__ *query" Error run_query( # Error f»SELECT * FROM students WHERE name = {arbitrary_string}» )
  • Idinagdag ang uri ng TypeVarTuple, na nagbibigay-daan sa paggamit ng mga variadic na generic, na, hindi katulad ng TypeVar, ay sumasaklaw sa hindi isang uri, ngunit isang arbitrary na bilang ng mga uri.
  • Kasama sa karaniwang library ang tomllib module na may mga function para sa pag-parse ng TOML format.
  • Available na ngayon ang kakayahang markahan ang mga indibidwal na elemento ng mga naka-type na diksyunaryo (TypedDict) na may mga Required at NotRequired na mga label upang matukoy kung kinakailangan ang mga field o hindi (bilang default, lahat ng ipinahayag na field ay kinakailangan maliban kung ang kabuuang parameter ay nakatakda sa False). class Movie(TypedDict): pamagat: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars"} # OK (opsyonal ang field ng taon) m3: Movie = {"year": 2022} # Error ang patlang, ang patlang ay hindi kailangan
  • Kasama na ngayon sa asyncio module ang isang klase ng TaskGroup. Ang klase na ito ay nagpapatupad ng isang asynchronous na tagapamahala ng konteksto na naghihintay para sa isang pangkat ng gawain upang makumpleto. Ang mga gawain ay idinaragdag sa pangkat gamit ang paraan ng create_task(). async def main(): async sa asyncio.TaskGroup() bilang tg: task1 = tg.create_task(some_coro(…)) task2 = tg.create_task(another_coro(…)) print("Nakumpleto na ngayon ang parehong gawain.")
  • Ang @dataclass_transform decorator para sa mga klase, pamamaraan, at function ay naidagdag na. Kapag tinukoy, nagiging sanhi ito ng static na uri ng checking system na tratuhin ang isang bagay na parang gumagamit ito ng @dataclasses.dataclass decorator. Sa halimbawa sa ibaba, ang klase ng CustomerModel ay ituturing sa panahon ng pagsuri ng uri nang katulad sa isang klase na may @dataclasses.dataclass decorator, ibig sabihin, bilang pagkakaroon ng __init__ na pamamaraan na tumatanggap ng mga variable ng id at pangalan. @dataclass_transform() class ModelBase: … class CustomerModel(ModelBase): id: int name: str
  • Sinusuportahan na ngayon ng mga regular na expression ang atomic grouping ((?>…)) at possessive quantifiers (*+, ++, ?+, {m,n}+).
  • Idinagdag ang opsyon sa command line na "-P" at ang PYTHONSAFEPATH environment variable upang i-disable ang awtomatikong pag-attach ng mga potensyal na hindi ligtas na mga path ng file sa sys.path.
  • Ang py.exe utility para sa platform ay lubos na pinabuti. Windows, na nagpapatupad ng suporta para sa syntax na "-V:". / " bukod pa sa "- . ".
  • Maraming macro sa C API ang na-convert sa mga regular o static na inline na function.
  • Ang mga sumusunod na module ay hindi na ginagamit at aalisin sa Python 3.13: uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, at sun Ang mga function na PyUnicode_Encode* ay inalis na.

Pinagmulan: opennet.ru

Bumili ng maaasahang pagho-host para sa mga site na may proteksyon ng DDoS, mga server ng VPS VDS 🔥 Bumili ng maaasahang website hosting na may proteksyon ng DDoS, VPS VDS servers | ProHoster