Python 3.10 программалоо тилинин чыгарылышы

Бир жылдык иштеп чыгуудан кийин, Python 3.10 программалоо тилинин олуттуу релизи көрсөтүлөт. Жаңы филиал бир жарым жыл колдоого алынат, андан кийин дагы үч жарым жыл, алсыздыктарды жоюу үчүн оңдоолор түзүлөт.

Ошол эле учурда, Python 3.11 бутагынын альфа тестирлөөсү башталды (жаңы иштеп чыгуу графигине ылайык, жаңы филиалда иштөө мурунку филиалдын чыгышына беш ай калганда башталып, кийинки чыгарылыш учурунда альфа тестирлөө стадиясына жетет. ). Python 3.11 бутагы жети ай бою альфа-релиздерде болот, анын жүрүшүндө жаңы функциялар кошулуп, мүчүлүштүктөр оңдолот. Андан кийин бета версиялары үч ай бою сыналат, анын жүрүшүндө жаңы функцияларды кошууга тыюу салынат жана бардык көңүл мүчүлүштүктөрдү оңдоого бурулат. Чыгарылганга чейин акыркы эки ай, бутак акыркы турукташтыруу аткарылат бошотуу талапкер стадиясында болот.

Python 3.10 жаңы толуктоолор камтыйт:

  • Коддун окулушун жакшыртуучу, ыктыярдуу Python объекттеринин дал келүүсүн жөнөкөйлөштүрүүчү жана өркүндөтүлгөн статикалык типти текшерүү аркылуу коддун ишенимдүүлүгүн жогорулаткан үлгү дал келүү үчүн "матч" жана "жагдай" операторлору ишке киргизилди. Ишке ашыруу Scala, Rust жана F# тилдеринде берилген "матч" операторуна окшош, ал "касе" операторунун негизинде блоктордо саналган үлгүлөрдүн тизмеси менен көрсөтүлгөн туюнтма натыйжасын салыштырат.

    def http_error(status): дал келүү статусу: 400-кабыл: "Начар сурамды" кайтаруу 401|403|404: "Уруксат берилбейт" учурун кайтаруу 418: "Мен чайнекмин" учурун кайтаруу _: "Башка нерсени" кайтаруу

    Учурдагы маанилердин негизинде өзгөрмөлөрдү байланыштыруу үчүн объекттерди, кортеждерди, тизмелерди жана ыктыярдуу ырааттуулуктарды таңгактан чыгара аласыз. Уюшкан калыптарды аныктоого, шаблондо кошумча “if” шарттарын колдонууга, маскаларды (“[x, y, *rest]”), ачкыч/маанилердин салыштырмаларын колдонууга уруксат берилет (мисалы, {“өткөөлмөк”: b, “кечүүлөр ”: l} сөздүктөн “өткөөлмөктүн кеңдиги” жана “кечиктирүү” маанилерин чыгаруу үчүн, суб шаблондорду (": = оператору) чыгарып алыңыз, калыпта аталган константаларды колдонуңуз. Класстарда “__match__()” ыкмасын колдонуу менен дал келген жүрүм-турумду ыңгайлаштырууга болот.

    маалымат класстарынан импорттоо dataclass @dataclass class Point: x: int y: int def whereis(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 another") case _: print("Not a point") дал келүү чекит: чекит Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on диагональ") КЫЗЫЛ, ЖАШЫЛ, КӨК = 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(): ... if lel: ... x = 2 Файл " ", 3-сап x = 2 ^ IndentationError: 2-саптагы "if" билдирүүсүнөн кийин чегинген блок күтүлгөн

    Функциядагы атрибуттардын жана өзгөрмөлөрдүн аталыштарындагы каталардан улам келип чыккан каталарда туура аталышы бар сунуш чыгарылат. >>>collections.namedtoplo Traceback (акыркы чалуу): Файл « ", 1-сап, в AttributeError: "жыйнамалар" модулунун "namedtoplo" атрибуту жок. Сиз мындай дедиңиз беле: nametuple?

  • Мүчүлүштүктөрдү оңдоо куралдары жана профилдер үчүн окуяларды көзөмөлдөө аткарылган коддун так сап номерлери менен камсыз кылынат.
  • TextIOWrapper менен байланышкан мүмкүн болуучу каталар жөнүндө эскертүү көрсөтүү үчүн sys.flags.warn_default_encoding жөндөөсү кошулду жана open() 'encoding=»utf-8» опциясын ачык көрсөтпөстөн UTF-8 коддолгон файлдарды иштетет (ASCII коддоо демейки боюнча колдонулат) . Жаңы релиз ошондой эле учурдагы тилге негизделген коддоону коюу үчүн 'encoding="locale"' маанисин көрсөтүү мүмкүнчүлүгүн берет.
  • Терүү модулуна жаңы оператор кошулду, ал типтин аннотацияларын көрсөтүү үчүн куралдар менен камсыз кылып, “X | Түрлөрдүн бирин тандоо үчүн Y" (X түрү же Y түрү). def квадрат(сан: int | float) -> int | float: return саны ** 2 мурда колдоого алынган конструкцияга барабар: def square(сан: Union[int, float]) -> Union[int, float]: кайтаруу саны ** 2
  • Терүү модулуна Concatenate оператору жана ParamSpec өзгөрмө кошулду, алар Callable колдонууда статикалык типти текшерүү үчүн кошумча маалыматты өткөрүүгө мүмкүндүк берет. Терүү модулу ошондой эле типти коргоо функцияларына түшүндүрмө берүү үчүн TypeGuard жана типтин лакап атын ачык аныктоо үчүн TypeAlias ​​атайын маанилерин кошот. StrCache: TypeAlias ​​= 'Кэш[str]' # түрдөгү лакап ат
  • zip() функциясы кошумча “катуу” желекти ишке ашырат, ал белгиленгенде кайталануучу аргументтердин бирдей узундугун текшерет. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> тизме(zip(аралыгы(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (эң акыркы чалуу акыркы чалуу ): … ValueError: zip() 2 аргументи 1 аргументтен узунураак
  • iter() жана next() функцияларына асинхрондук аналогдорду ишке ашыруу менен aiter() жана anext() жаңы орнотулган функциялар сунушталат.
  • Чакан объекттер менен иштөөдө str(), bytes() жана bytearray() конструкторлорунун иши 30-40% га тездетилген.
  • Runpy модулундагы импорттук операциялардын саны кыскартылды. "python3 -m module_name" командасы азыр импорттолгон модулдардын 1.4дан 69ге чейин кыскарышынан улам орто эсеп менен 51 эсе тез иштейт.
  • LOAD_ATTR инструкциясы жеке опкоддор үчүн кэштөө механизмин колдонот, бул кадимки атрибуттар менен иштөөнү 36% га, слоттор менен 44% га чейин тездетүүгө мүмкүндүк берди.
  • Pythonду “--enable-optimizations” опциясы менен курууда, “-fno-semantic-interposition” режими иштетилди, ал “--enable-shared” менен курууга салыштырмалуу котормочуну 30% га чейин тездетүүгө мүмкүндүк берет. ” опциясы.
  • Hashlib жана ssl модулдары OpenSSL 3.0.0 үчүн колдоону кошту жана 1.1.1ден эски OpenSSL версияларын колдоону токтотту.
  • Эски талдоочу алынып салынды, ал мурунку бутакта PEG (Parsing Expression Grammar) талдоочу менен алмаштырылды. Форматтоочу модулу алынып салынды. Цикл параметри асинсио APIден алынып салынды. Мурда эскирген ыкмалар алынып салынды. Py_UNICODE* саптарын башкарган Py_UNICODE_str* функциялары алынып салынды.
  • distutils модулу эскирген жана Python 3.12де жок кылынышы пландаштырылган. Distutils ордуна, орнотуу куралдарын, таңгактарды, платформаны, shutil, субпроцесс жана sysconfig модулдарын колдонуу сунушталат. PyUnicodeObject ичиндеги wstr түзүмү эскирилген жана алып салуу пландаштырылган.

Source: opennet.ru

Комментарий кошуу