Python 3.10 ծրագրավորման լեզվի թողարկում

Մեկ տարվա մշակումից հետո ներկայացվում է Python 3.10 ծրագրավորման լեզվի զգալի թողարկումը։ Նոր մասնաճյուղը կաջակցվի մեկուկես տարի, որից հետո ևս երեքուկես տարի կստեղծվեն շտկումներ՝ վերացնելու խոցելիությունը։

Միևնույն ժամանակ, սկսվեց Python 3.11 մասնաճյուղի ալֆա փորձարկումը (զարգացման նոր ժամանակացույցի համաձայն, նոր մասնաճյուղի վրա աշխատանքը սկսվում է նախորդ մասնաճյուղի թողարկումից հինգ ամիս առաջ և հասնում է ալֆա թեստավորման փուլին հաջորդ թողարկման պահին: ) Python 3.11 մասնաճյուղը ալֆա թողարկվելու է յոթ ամիս, որի ընթացքում կավելացվեն նոր հնարավորություններ և կշտկվեն սխալները։ Դրանից հետո բետա տարբերակները կփորձարկվեն երեք ամսով, որի ընթացքում կարգելվի նոր գործառույթների ավելացումը և ամբողջ ուշադրությունը կդարձվի սխալների շտկմանը։ Թողարկումից առաջ վերջին երկու ամիսների ընթացքում մասնաճյուղը գտնվելու է ազատ արձակման թեկնածուի փուլում, որի ժամանակ կկատարվի վերջնական կայունացում։

Python 3.10-ի նոր հավելումները ներառում են.

  • Իրականացված «match» և «case» օպերատորներ օրինաչափությունների համապատասխանության համար, որոնք բարելավում են կոդերի ընթեռնելիությունը, պարզեցնում են կամայական Python օբյեկտների համընկնումը և ավելացնում կոդի հուսալիությունը առաջադեմ ստատիկ տիպի ստուգման միջոցով: Իրականացումը շատ նման է Scala-ում, Rust-ում և F#-ում տրված «match» օպերատորին, որը համեմատում է նշված արտահայտության արդյունքը «case» օպերատորի հիման վրա բլոկներում թվարկված օրինաչափությունների ցանկի հետ:

    def http_error(status). համընկնում կարգավիճակ. դեպք 400. վերադարձ «Վատ խնդրանք» դեպք 401|403|404. վերադարձ «Չի թույլատրվում» դեպք 418. վերադարձ «Ես թեյնիկ եմ» դեպք _: վերադարձ «Ուրիշ բան»

    Դուք կարող եք բացել առարկաներ, բազմակներ, ցուցակներ և կամայական հաջորդականություններ՝ գոյություն ունեցող արժեքների հիման վրա փոփոխականները կապելու համար: Թույլատրվում է սահմանել տեղադրված կաղապարներ, օգտագործել լրացուցիչ «եթե» պայմաններ կաղապարում, օգտագործել դիմակներ («[x, y, *rest]»), բանալի/արժեքի քարտեզագրում (օրինակ՝ {«թողունակություն»՝ b, «latency»: l} բառարանից «թողունակություն» և «լատենտություն» արժեքներ հանելու համար, ենթակաղաններ հանելու (":=" օպերատոր), օգտագործել անվանված հաստատուններ կաղապարում: Դասերում հնարավոր է հարմարեցնել համապատասխան վարքագիծը՝ օգտագործելով «__match__()» մեթոդը:

    dataclass-ից ներմուծել dataclass @dataclass class Կետ՝ x: int y: int def որտեղիս(կետ): համընկնում կետ: 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") case _: print("Not a point") համընկնում կետ. դեպք Կետ(x, y) եթե x == y. տպել(f"Y=X ժամը {x}") դեպքով Կետ(x, y): տպել(f"Ոչ անկյունագծով") ԿԱՐՄԻՐ, ԿԱՆԱՉ, ԿԱՊՈՒՅՏ = 0, 1, 2 համընկնման գույն. մեծատառ ԿԱՐՄԻՐ. տպել («Ես կարմիր եմ տեսնում») ԿԱՆԱՉ. տպագիր («Խոտը կանաչ է») մեծատառ ԿԱՊՈՒՅՏ՝ տպագիր («Ես զգում եմ բլյուզը :(»)

  • Այժմ հնարավոր է օգտագործել փակագծերը with հայտարարության մեջ՝ համատեքստի կառավարիչների հավաքածուի սահմանումը մի քանի տողերի վրա բաժանելու համար: Խմբում թույլատրվում է նաև ստորակետ թողնել կոնտեքստի վերջնական կառավարիչից հետո՝ ( CtxManager1() որպես օրինակ1, CtxManager2() որպես օրինակ2, CtxManager3() որպես օրինակ3, ):...
  • Բարելավված զեկուցում կոդի տեղակայման սխալների վերաբերյալ, որոնք կապված են չփակ փակագծերի և չակերտների հետ լարային տառերով: Օրինակ, երբ կա չփակ փակագիծ, հաջորդ կառուցվածքում շարահյուսական սխալի մասին զեկուցելու փոխարեն, սլաքն այժմ ընդգծում է բացվող փակագիծը և ցույց է տալիս, որ փակող բլոկ չկա: Ֆայլ «example.py», տող 1 սպասվում է = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' երբեք չի փակվել

    Ավելացվել են լրացուցիչ մասնագիտացված շարահյուսական սխալի հաղորդագրություններ. բացակայում է «:» նշանը բլոկի առաջ և բառարաններում, փակագծերով բազմակի չառանձնացնելը, ցուցակներում ստորակետ բաց թողնելը, «փորձել» բլոկը նշել առանց «բացառությամբ» և «վերջապես», օգտագործելով «=» « = ="-ի փոխարեն համեմատություններում` նշելով *-արտահայտությունները f տողերում: Բացի այդ, այն ապահովում է, որ ընդգծվի ամբողջ խնդրահարույց արտահայտությունը, այլ ոչ միայն սկիզբը, և ավելի հստակ տեղեկատվությունը սխալ ներքևի հետ կապված սխալների համատեքստի մասին: >>> def foo(): ... եթե lel: ... x = 2 Ֆայլ " «, տող 3 x = 2 ^ IndentationError. սպասվում էր նահանջ բլոկ 2-րդ տողում «եթե» հայտարարությունից հետո

    Ֆունկցիայի ատրիբուտների և փոփոխականների անունների տառասխալների հետևանքով առաջացած սխալների դեպքում դուրս է գալիս ճիշտ անունով առաջարկություն: >>>collections.namedtoplo Traceback (վերջին զանգը վերջին): Ֆայլ « «, տող 1, ներս Հատկանիշ Սխալ․ «հավաքածուներ» մոդուլը չունի «namedtoplo» հատկանիշ։ Նկատի ունեիք՝ namedtuple?

  • Վրիպազերծման գործիքների և պրոֆիլների համար հետագծային իրադարձությունները տրամադրվում են կատարված կոդի ճշգրիտ տողերի համարներով:
  • Ավելացվեց sys.flags.warn_default_encoding պարամետրը՝ TextIOWrapper-ի և open()-ի հետ կապված հնարավոր սխալների մասին նախազգուշացում ցուցադրելու և UTF-8 կոդավորված ֆայլերի մշակման համար՝ առանց հստակ նշելու «encoding=»utf-8» տարբերակը (ASCII կոդավորումն օգտագործվում է լռելյայն): Նոր թողարկումը նաև հնարավորություն է տալիս նշելու «encoding="locale" արժեքը՝ կոդավորումը ընթացիկ տեղանքի հիման վրա սահմանելու համար:
  • Տպելու մոդուլին ավելացվել է նոր օպերատոր, որը տրամադրում է տիպային անոտացիաներ նշելու գործիքներ՝ թույլ տալով օգտագործել «X | Y» տեսակներից մեկն ընտրելու համար (X տեսակ կամ Y տեսակ): def Square(համարը՝ int | float) -> int | float. վերադարձի համարը ** 2-ը համարժեք է նախկինում աջակցվող կառուցվածքին. def Square(համարը՝ Union[int, float]) -> Union[int, float]: վերադարձի համարը ** 2
  • Concatenate օպերատորը և ParamSpec փոփոխականը ավելացվել են մուտքագրման մոդուլին, որոնք թույլ են տալիս լրացուցիչ տեղեկատվություն փոխանցել ստատիկ տիպի ստուգման համար Callable-ի օգտագործման ժամանակ: Մուտքագրման մոդուլը նաև ավելացնում է հատուկ արժեքներ՝ «TypeGuard»՝ տիպի պաշտպանության գործառույթները նշելու համար, և «TypeAlias»-ը՝ հստակորեն սահմանելու տիպի անուն: StrCache՝ TypeAlias ​​‎ = 'Cache[str]' # տիպի անուն
  • Zip() ֆունկցիան իրականացնում է կամընտիր «խիստ» դրոշակ, որը, երբ նշված է, ստուգում է, թե արդյոք կրկնվող արգումենտները նույն երկարությունն են: >>> ցուցակ(zip(('a', 'b', 'c'), (1, 2, 3), խիստ=Ճշմարիտ)) [('a', 1), ('b', 2) , ('c', 3)] >>> ցուցակ (zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Հետագծում (վերջին զանգը վերջին ): … ValueError. zip() արգումենտ 2-ն ավելի երկար է, քան 1-ին
  • Նոր ներկառուցված aiter() և anext() ֆունկցիաները առաջարկվում են iter() և next() ֆունկցիաների ասինխրոն անալոգների ներդրմամբ։
  • str(), bytes() և bytearray() կոնստրուկտորների աշխատանքը փոքր օբյեկտների հետ աշխատելիս արագացել է 30-40%-ով:
  • Նվազեցրեց ներմուծման գործողությունների քանակը runpy մոդուլում: «python3 -m module_name» հրամանն այժմ աշխատում է միջինը 1.4 անգամ ավելի արագ՝ ներմուծված մոդուլների 69-ից 51-ի կրճատման պատճառով։
  • LOAD_ATTR հրահանգը օգտագործում է քեշավորման մեխանիզմ առանձին օպերատիվ կոդերի համար, ինչը հնարավորություն է տվել արագացնել աշխատանքը սովորական ատրիբուտների հետ մինչև 36%, իսկ slots-ներով մինչև 44%:
  • Python-ը «--enable-optimizations» տարբերակով կառուցելիս այժմ միացված է «-fno-semantic-interposition» ռեժիմը, որը թույլ է տալիս արագացնել թարգմանիչը մինչև 30%-ով՝ համեմատած «--enable-shared»-ի հետ: » տարբերակ.
  • Հաշլիբ և ssl մոդուլներն ավելացրել են OpenSSL 3.0.0-ի աջակցությունը և դադարեցրել 1.1.1-ից ավելի հին OpenSSL տարբերակների աջակցությունը:
  • Հին վերլուծիչը հեռացվել է, որը նախորդ ճյուղում փոխարինվել է PEG (Parsing Expression Grammar) վերլուծիչով: Ձևաչափիչի մոդուլը հեռացվել է: Օղակի պարամետրը հեռացվել է asyncio API-ից: Նախկինում հնացած մեթոդները հեռացվել են: Py_UNICODE_str* ֆունկցիաները, որոնք շահարկում են Py_UNICODE* տողերը, հեռացվել են:
  • Distutils մոդուլը հնացել է և նախատեսվում է հեռացնել Python 3.12-ում: Distutils-ի փոխարեն խորհուրդ է տրվում օգտագործել setuptools, packaging, platform, shutil, subprocess և sysconfig մոդուլները: PyUnicodeObject-ում wstr կառուցվածքը հնացել է և նախատեսվում է հեռացնել:

Source: opennet.ru

Добавить комментарий