Pagpagawas sa Python 3.10 programming language

Pagkahuman sa usa ka tuig nga pag-uswag, gipresentar ang hinungdanon nga pagpagawas sa Python 3.10 programming language. Ang bag-ong sanga suportahan sulod sa usa ug tunga ka tuig, ug human niini sulod sa laing tulo ug tunga ka tuig, ang mga pag-ayo himoon aron kini mawagtang ang mga kahuyangan.

Sa parehas nga oras, nagsugod ang pagsulay sa alpha sa sanga sa Python 3.11 (sumala sa bag-ong iskedyul sa pag-uswag, ang pagtrabaho sa usa ka bag-ong sanga magsugod lima ka bulan sa wala pa ang pagpagawas sa miaging sanga ug makaabut sa yugto sa pagsulay sa alpha sa oras sa sunod nga pagpagawas. ). Ang sanga sa Python 3.11 anaa sa alpha release sulod sa pito ka bulan, diin ang mga bag-ong feature idugang ug ang mga bug ayohon. Pagkahuman niini, ang mga bersyon sa beta pagasulayan sulod sa tulo ka bulan, diin ang pagdugang sa mga bag-ong bahin idili ug ang tanan nga atensyon ibayad sa pag-ayo sa mga bug. Sa katapusan nga duha ka bulan sa wala pa ang pagpagawas, ang sanga anaa sa yugto sa pagpagawas sa kandidato, diin ang katapusan nga pagpalig-on ipahigayon.

Ang bag-ong mga pagdugang sa Python 3.10 naglakip sa:

  • Gipatuman ang "match" ug "case" operators para sa pattern matching, nga mopauswag sa code readability, mopasimple sa pagpares sa arbitraryong Python objects, ug mopataas sa code reliability pinaagi sa advanced static type checking. Ang pagpatuman sama ra sa operator nga "match" nga gihatag sa Scala, Rust, ug F #, nga nagtandi sa resulta sa usa ka espesipikong ekspresyon sa usa ka lista sa mga pattern nga gilista sa mga bloke base sa "case" operator.

    def http_error(status): match status: case 400: return “Bad request” case 401|403|404: return “Not allowed” case 418: return “Ako usa ka teapot” case _: return “Usa pa ka butang”

    Mahimo nimong i-unpack ang mga butang, tuple, lista, ug arbitraryong mga han-ay aron mabugkos ang mga variable base sa naa na nga mga kantidad. Gitugotan ang paghubit sa mga nested templates, paggamit og dugang nga "kon" nga mga kondisyon sa template, paggamit og mga maskara ("[x, y, *rest]"), key/value mappings (pananglitan, {"bandwidth": b, "latency ”: l} aron makuha ang "bandwidth" ug "latency" nga mga kantidad gikan sa usa ka diksyonaryo), i-extract ang mga subtemplates (":=" operator), gamita ang ginganlan nga mga constant sa usa ka template. Sa mga klase, posible nga ipasibo ang pagkaparehas nga pamatasan gamit ang "__match__()" nga pamaagi.

    gikan sa dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(punto): 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("Sa laing dapit") case _: print("Not a point") match punto: case Point(x, y) kon x == y: print(f"Y=X sa {x}") case Point(x, y): print(f"Dili sa diagonal") PULANG, BERDE, BLUE = 0, 1, 2 match color: case RED: print("Nakita ko nga pula!") case GREEN: print("Grass is green") case BLUE: print("Gibati nako ang blues :(")

  • Posible na nga gamiton ang mga parentesis sa with statement aron mabahin ang kahulugan sa usa ka koleksyon sa mga tagdumala sa konteksto sa daghang linya. Gitugotan usab nga magbilin ug comma pagkahuman sa katapusan nga tagdumala sa konteksto sa grupo: nga adunay ( CtxManager1 () ingon pananglitan1, CtxManager2 () pananglitan2, CtxManager3 () ingon pananglitan3, ): ...
  • Gipauswag nga pagreport sa lokasyon sa code sa mga sayup nga may kalabotan sa wala masira nga mga braces ug mga kinutlo sa mga literal nga string. Pananglitan, kung adunay usa ka unclosed brace, imbis nga magreport sa usa ka syntax error sa mosunod nga construct, ang pointer karon nagpasiugda sa opening brace ug nagpakita nga walay closing block. File "example.py", linya 1 gilauman = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' wala gyud sirado

    Gidugang ang dugang nga espesyal nga mga mensahe sa sayup nga syntax: nawala nga ":" nga simbolo sa atubangan sa usa ka bloke ug sa mga diksyonaryo, wala nagbulag sa usa ka tuple nga adunay mga parentheses, wala’y usa ka koma sa mga lista, nagpiho sa usa ka "try" nga bloke nga wala "gawas" ug "sa katapusan", gamit ang "= " imbes nga "= =" sa mga pagtandi, nagpiho sa *-mga ekspresyon sa f-strings. Dugang pa, kini nagsiguro nga ang tibuok nga problema nga ekspresyon gipasiugda, dili lamang ang sinugdanan, ug mas klaro nga impormasyon mahitungod sa konteksto sa mga sayop nga nalangkit sa sayop nga indentation. >>> def foo(): ... kon lel: ... x = 2 File " ", linya 3 x = 2 ^ IndentationError: gilauman nga usa ka indented block human sa 'kon' nga pahayag sa linya 2

    Sa mga sayup nga gipahinabo sa mga typo sa mga ngalan sa mga hiyas ug mga variable nga ngalan sa usa ka function, usa ka rekomendasyon nga adunay husto nga ngalan ang output. >>>collections.namedtoplo Traceback (labing bag-o nga tawag sa katapusan): File « ", linya 1, sa AttributeError: module 'collections' walay attribute 'namedtoplo'. Ang imong gipasabot: nametuple?

  • Para sa mga gamit sa pag-debug ug mga profiler, ang pagsubay sa mga panghitabo gihatag sa eksaktong numero sa linya sa gipatuman nga code.
  • Gidugang ang setting sa sys.flags.warn_default_encoding aron ipakita ang usa ka pasidaan bahin sa mga potensyal nga sayup nga may kalabotan sa TextIOWrapper ug bukas () nga pagproseso sa mga file nga naka-encode sa UTF-8 nga wala’y klaro nga gipiho ang kapilian nga 'encoding=»utf-8″' (Ang pag-encode sa ASCII gigamit nga default) . Ang bag-ong pagpagawas naghatag usab ug katakus sa pagtino sa usa ka 'encoding="locale"' nga kantidad aron itakda ang pag-encode base sa karon nga lokal.
  • Usa ka bag-ong operator ang gidugang sa typing module, nga naghatag mga himan alang sa pagtino sa tipo nga anotasyon, nga gitugotan ang paggamit sa syntax nga "X | Y" sa pagpili sa usa sa mga tipo (X type o Y type). def square(numero: int | float) -> int | float: ang pagbalik nga numero ** 2 katumbas sa gisuportahan kaniadto nga pagtukod: def square(numero: Union[int, float]) -> Union[int, float]: return number ** 2
  • Ang Concatenate operator ug ang ParamSpec variable gidugang sa typing module, nga nagtugot kanimo sa pagpasa sa dugang nga impormasyon alang sa static type checking kung gamiton ang Callable. Ang modyul sa pag-type nagdugang usab ug mga espesyal nga kantidad TypeGuard aron i-annotate ang mga function sa pagpanalipod sa tipo ug TypeAlias ​​​​sa dayag nga paghubit sa usa ka tipo nga alias. StrCache: TypeAlias ​​​​= 'Cache[str]' # usa ka tipo nga alias
  • Ang zip() function nagpatuman sa usa ka opsyonal nga "estrikto" nga bandila, nga, kung gipiho, nagsusi kung ang mga argumento nga gisubli parehas ang gitas-on. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=Tinuod)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (labing bag-o nga tawag sa katapusan ): … ValueError: zip() argumento 2 mas taas kay sa argumento 1
  • Bag-ong built-in nga mga function aiter() ug anext() gisugyot uban sa pagpatuman sa asynchronous analogues sa mga function iter() ug sunod().
  • Ang buhat sa str(), bytes() ug bytearray() constructors sa dihang nagtrabaho uban sa gagmay nga mga butang gipaspasan sa 30-40%.
  • Gipakunhod ang gidaghanon sa mga operasyon sa pag-import sa runpy module. Ang sugo nga "python3 -m module_name" karon nagdagan sa aberids nga 1.4 ka beses nga mas paspas tungod sa pagkunhod sa mga imported nga modules gikan sa 69 ngadto sa 51.
  • Ang LOAD_ATTR nga instruksyon naggamit ug mekanismo sa pag-cache alang sa tagsa-tagsa nga mga opcode, nga nagpaposible sa pagpadali sa trabaho nga adunay regular nga mga hiyas hangtod sa 36%, ug adunay mga slots hangtod sa 44%.
  • Kung ang pagtukod sa Python gamit ang "--enable-optimizations" nga kapilian, ang "-fno-semantic-interposition" nga mode gipalihok na, nga nagtugot sa pagpadali sa tighubad hangtod sa 30% kumpara sa pagtukod gamit ang "--enable-shared. ” kapilian.
  • Ang hashlib ug ssl modules midugang og suporta para sa OpenSSL 3.0.0 ug mihunong sa pagsuporta sa mga bersyon sa OpenSSL nga mas tigulang kay sa 1.1.1.
  • Ang daan nga parser gitangtang, nga gipulihan sa miaging sanga sa PEG (Parsing Expression Grammar) parser. Ang modulo sa formatter gikuha na. Ang loop parameter gitangtang gikan sa asyncio API. Ang mga pamaagi nga wala gigamit kaniadto gitangtang. Ang Py_UNICODE_str* nga mga gimbuhaton nga nagmaniobra sa Py_UNICODE* nga mga kuwerdas gikuha na.
  • Ang distutils module wala na gigamit ug gikatakda nga tangtangon sa Python 3.12. Imbes nga distutils, girekomendar nga gamiton ang setuptools, packaging, platform, shutil, subprocess ug sysconfig modules. Ang wstr nga estraktura sa PyUnicodeObject wala na gamita ug gikatakda nga tangtangon.

Source: opennet.ru

Idugang sa usa ka comment