Paglabas ng Python 3.10 programming language

Pagkatapos ng isang taon ng pag-unlad, ipinakita ang makabuluhang paglabas ng Python 3.10 programming language. 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.11 (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.11 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.10 ay kinabibilangan ng:

  • Ipinatupad ang mga operator ng "tugma" at "case" para sa pagtutugma ng pattern, na nagpapahusay sa pagiging madaling mabasa ng code, pinapasimple ang pagtutugma ng mga arbitrary na bagay sa Python, at pinapataas ang pagiging maaasahan ng code sa pamamagitan ng advanced na static type checking. Ang pagpapatupad ay halos katulad ng operator na "tugma" na ibinigay sa Scala, Rust, at F#, na naghahambing sa resulta ng isang tinukoy na expression sa isang listahan ng mga pattern na nakalista sa mga bloke batay sa operator na "case".

    def http_error(status): match status: case 400: return “Bad request” case 401|403|404: return “Bawal” case 418: return “I'm a teapot” case _: return “Something else”

    Posibleng i-unpack ang mga bagay, tuple, listahan at mga arbitrary na pagkakasunud-sunod upang i-bind ang mga variable batay sa mga umiiral nang value. Pinapayagan na tukuyin ang mga nested na template, gumamit ng karagdagang "kung" kundisyon sa template, gumamit ng mga mask ("[x, y, *rest]"), key/value mappings (halimbawa, {"bandwidth": b, "latency ”: l} upang kunin ang mga halaga ng "bandwidth" at "latency" mula sa isang diksyunaryo), kunin ang mga subtemplates (":=" operator), gumamit ng pinangalanang mga constant sa isang template. Sa mga klase, posibleng i-customize ang pagtutugma ng gawi gamit ang "__match__()" na paraan.

    mula sa mga dataclass ay nag-import ng dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point") tugma punto: case Point(x, y) kung x == y: print(f"Y=X sa {x}") case Point(x, y): print(f"Not on the diagonal") RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print(“I see red!”) case GREEN: print(“Grass is green”) case BLUE: print(“Feeling ko ang blues :(“)

  • Posible na ngayong gumamit ng mga panaklong sa with statement upang hatiin ang kahulugan ng isang koleksyon ng mga tagapamahala ng konteksto sa maraming linya. Pinapayagan din na mag-iwan ng kuwit pagkatapos ng panghuling tagapamahala ng konteksto sa pangkat: na may ( CtxManager1() bilang halimbawa1, CtxManager2() bilang halimbawa2, CtxManager3() bilang halimbawa3, ): ...
  • Pinahusay na pag-uulat ng lokasyon ng code ng mga error na nauugnay sa mga hindi nakasarang brace at quote sa mga literal na string. Halimbawa, kapag mayroong unclosed brace, sa halip na mag-ulat ng syntax error sa sumusunod na construct, hina-highlight na ngayon ng pointer ang opening brace at ipinapahiwatig na walang closing block. File "example.py", line 1 expected = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' ay hindi kailanman isinara

    Nagdagdag ng mga karagdagang espesyal na mensahe ng error sa syntax: nawawala ang simbolo na ":" bago ang isang bloke at sa mga diksyunaryo, hindi naghihiwalay ng tuple na may mga panaklong, walang kuwit sa mga listahan, na tumutukoy ng "try" na bloke nang walang "maliban" at "sa wakas", gamit ang "= " sa halip na "= =" sa mga paghahambing, tinutukoy ang mga *-expression sa f-strings. Bilang karagdagan, tinitiyak nito na ang buong problemang expression ay naka-highlight, hindi lamang sa simula, at mas tahasang impormasyon tungkol sa konteksto ng mga error na nauugnay sa maling indentation. >>> def foo(): ... kung lel: ... x = 2 File " ", linya 3 x = 2 ^ IndentationError: inaasahan ang isang naka-indent na bloke pagkatapos ng 'if' na pahayag sa linya 2

    Sa mga error na dulot ng mga typo sa mga pangalan ng mga attribute at variable na pangalan sa isang function, isang rekomendasyon na may tamang pangalan ang output. >>>collections.namedtoplo Traceback (huling huling tawag): File « ", linya 1, sa AttributeError: ang module na 'collections' ay walang attribute na 'namedtoplo'. Ang ibig mo bang sabihin ay: namedtuple?

  • Para sa mga tool sa pag-debug at profiler, ang mga trace na kaganapan ay binibigyan ng eksaktong mga numero ng linya ng naisagawang code.
  • Idinagdag ang setting ng sys.flags.warn_default_encoding upang magpakita ng babala tungkol sa mga potensyal na error na nauugnay sa TextIOWrapper at open() na nagpoproseso ng mga file na naka-encode ng UTF-8 nang hindi tahasang tinutukoy ang opsyong 'encoding=»utf-8″' (ginagamit ang ASCII encoding bilang default) . Nagbibigay din ang bagong release ng kakayahang tumukoy ng value na 'encoding="locale"' para itakda ang encoding batay sa kasalukuyang locale.
  • Ang isang bagong operator ay idinagdag sa module ng pagta-type, na nagbibigay ng mga tool para sa pagtukoy ng mga uri ng anotasyon, na nagpapahintulot sa paggamit ng syntax na "X | Y" upang pumili ng isa sa mga uri (uri ng X o uri ng Y). def square(numero: int | float) -> int | float: return number ** 2 ay katumbas ng dating sinusuportahang construct: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • Ang Concatenate operator at ang ParamSpec variable ay naidagdag sa typing module, na nagbibigay-daan sa iyong magpasa ng karagdagang impormasyon para sa static type checking kapag gumagamit ng Callable. Ang module ng pag-type ay nagdaragdag din ng mga espesyal na halaga TypeGuard upang i-annotate ang mga function ng proteksyon ng uri at TypeAlias ​​upang tahasang tukuyin ang isang uri ng alias. StrCache: TypeAlias ​​​​= 'Cache[str]' # isang uri ng alias
  • Ang zip() function ay nagpapatupad ng isang opsyonal na "mahigpit" na flag, na, kapag tinukoy, sinusuri kung ang mga argumento na inuulit ay pareho ang haba. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (huling huling tawag ): … ValueError: zip() argument 2 ay mas mahaba kaysa argument 1
  • Ang mga bagong built-in na function na aiter() at anext() ay iminungkahi sa pagpapatupad ng mga asynchronous na analogue sa mga function na iter() at next().
  • Ang gawain ng str(), bytes() at bytearray() constructors kapag nagtatrabaho sa maliliit na bagay ay pinabilis ng 30-40%.
  • Binawasan ang bilang ng mga pagpapatakbo ng pag-import sa runpy module. Ang command na "python3 -m module_name" ay tumatakbo na ngayon sa average na 1.4 beses na mas mabilis dahil sa pagbabawas ng mga na-import na module mula 69 hanggang 51.
  • Gumagamit ang pagtuturo ng LOAD_ATTR ng mekanismo ng pag-cache para sa mga indibidwal na opcode, na naging posible upang mapabilis ang trabaho gamit ang mga regular na katangian nang hanggang 36%, at may mga puwang ng hanggang 44%.
  • Kapag bumubuo ng Python gamit ang opsyong "--enable-optimizations", ang "-fno-semantic-interposition" mode ay pinagana na ngayon, na nagbibigay-daan sa pagpapabilis ng interpreter ng hanggang 30% kumpara sa pagbuo gamit ang "--enable-shared ” opsyon.
  • Ang hashlib at ssl module ay nagdagdag ng suporta para sa OpenSSL 3.0.0 at huminto sa pagsuporta sa mga bersyon ng OpenSSL na mas luma sa 1.1.1.
  • Ang lumang parser ay inalis, na pinalitan sa nakaraang sangay ng PEG (Parsing Expression Grammar) parser. Ang formatter module ay tinanggal. Ang loop parameter ay inalis mula sa asyncio API. Ang mga pamamaraan na dati nang hindi ginagamit ay inalis na. Ang mga function na Py_UNICODE_str* na nagmamanipula ng mga string ng Py_UNICODE* ay inalis na.
  • Ang distutils module ay hindi na ginagamit at nakaiskedyul na alisin sa Python 3.12. Sa halip na distutils, inirerekumenda na gamitin ang setuptools, packaging, platform, shutil, subprocess at sysconfig modules. Ang istraktura ng wstr sa PyUnicodeObject ay hindi na ginagamit at nakaiskedyul para sa pag-alis.

Pinagmulan: opennet.ru

Magdagdag ng komento