Објавување на програмскиот јазик Python 3.11

По една година развој, објавено е значајното издание на програмскиот јазик Python 3.11. Новата филијала ќе биде поддржана една и пол година, по што за уште три и пол години ќе се генерираат поправки за да се отстранат пропустите.

Во исто време, започна алфа тестирањето на гранката Python 3.12 (во согласност со новиот распоред за развој, работата на нова гранка започнува пет месеци пред објавувањето на претходната гранка и достигнува фаза на алфа тестирање до следното издание ). Филијалата на Python 3.12 ќе биде во алфа издание седум месеци, за време на кои ќе бидат додадени нови функции и ќе се поправат грешките. По ова, бета верзиите ќе се тестираат три месеци, при што ќе биде забрането додавање на нови функции и целото внимание ќе се посвети на поправка на грешки. Последните два месеца пред пуштањето, гранката ќе биде во фаза кандидат за ослободување, на која ќе се изврши финална стабилизација.

Новите дополнувања на Python 3.11 вклучуваат:

  • Значајна работа е направена за да се оптимизираат перформансите. Новата гранка вклучува промени поврзани со забрзување и распоредување на функциските повици, употреба на брзи толкувачи на стандардни операции (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), како и оптимизации подготвени од проектите Cinder и HotPy. Во зависност од видот на оптоварувањето, има зголемување на брзината на извршување на кодот од 10-60%. Во просек, перформансите на пакетот за тестирање pyperformance се зголемија за 25%.

    Механизмот за кеширање на бајтекод е редизајниран, што го намали времето за стартување на преведувачот за 10-15%. Објектите со код и бајтекод сега се статички распределени од страна на толкувачот, што овозможи да се елиминираат фазите на раздвојување на бајтекодот извлечен од кешот и конвертирање на објекти со код што треба да се стават во динамичка меморија.

  • При прикажување на траги од повици во дијагностички пораки, сега е можно да се прикажат информации за изразот што ја предизвикал грешката (претходно само линијата беше означена без детално да се наведе кој дел од линијата ја предизвикал грешката). Информациите за проширена трага може да се добијат и преку API и да се користат за мапирање на поединечни инструкции за бајтекод на одредена позиција во изворниот код користејќи го методот codeobject.co_positions() или функцијата C API PyCode_Addr2Location(). Промената го олеснува отстранувањето грешки на проблемите со вгнездени речник објекти, повеќекратни повици на функции и сложени аритметички изрази. Следење (последниот повик последен): Датотека „calculation.py“, линија 54, како резултат = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: поделба со нула
  • Додадена е поддршка за групи со исклучоци, давајќи ѝ на програмата можност да генерира и обработува неколку различни исклучоци одеднаш. За да се групираат повеќе исклучоци и да се подигнат заедно, предложени се нови типови исклучоци ExceptionGroup и BaseExceptionGroup, а изразот „except*“ е додаден за да се истакнат поединечни исклучоци од група.
  • Методот add_note() е додаден во класата BaseException, што ви овозможува да прикачите текстуална белешка на исклучокот, на пример, додавајќи контекстуални информации што не се достапни кога исклучокот е исфрлен.
  • Додаден е посебен тип Self за претставување на тековната приватна класа. Self може да се користи за бележење на методи кои враќаат примерок од неговата класа на поедноставен начин отколку користење на TypeVar. класа MyLock: def __enter__(self) -> Self: self.lock() return self
  • Додаден е специјален тип LiteralString кој може да вклучува само буквални стрингови кои се компатибилни со типот LiteralString (т.е. голи и LiteralString низи, но не произволни или комбинирани низи од стрингови). Типот LiteralString може да се користи за да се ограничи пренесувањето на стринг аргументи на функции, произволна замена на делови од низи во кои може да доведе до пропусти, на пример, кога се генерираат низи за SQL барања или команди на школка. def run_query(sql: LiteralString) -> ... ... def caller( произволна_низа: str, query_string: LiteralString, табела_име: LiteralString, ) -> Нема: run_query("SELECT * FROM student") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Error run_query( # Error f"SELECT * FROM Students WHERE name = {arbitrary_string}" )
  • Додаден е типот TypeVarTuple, што овозможува користење на променливи генерики, за разлика од TypeVar, кои опфаќаат не еден тип, туку произволен број типови.
  • Стандардната библиотека го вклучува модулот tomllib со функции за парсирање на форматот TOML.
  • Можно е да се означат поединечни елементи на напишаните речници (TypedDict) со ознаки Required и NotRequired за да се одредат потребните и изборните полиња (стандардно, сите декларирани полиња се потребни ако вкупниот параметар не е поставен на False). class Movie(TypedDict): наслов: ул година: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # Во ред (полето за година е изборно) m3: Филм = {„година“: 2022} # Грешка, потребното поле за наслов не е пополнето)
  • Класата TaskGroup е додадена во модулот asyncio со имплементација на асинхрон контекстуален менаџер кој чека да заврши група задачи. Додавањето задачи во група се врши со помош на методот create_task(). async def main(): асинхронизирај со asyncio.TaskGroup() како tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Двете задачи се завршени сега .")
  • Додаден е украсувач @dataclass_transform за класи, методи и функции, кога е одредено, системот за проверка на статички тип го третира објектот како да користи декоратор @dataclasses.dataclass. Во примерот подолу, класата CustomerModel, при проверка на типовите, ќе се обработува слично како класа со декораторот @dataclasses.dataclass, т.е. како што има метод __init__ кој прифаќа променливи id и име. @dataclass_transform() класа ModelBase: ... класа CustomerModel(ModelBase): id: int name: str
  • Во регуларните изрази, додадена е способноста да се користи атомско групирање ((?>...)) и посесивни квантификатори (*+, ++, ?+, {m,n}+).
  • Додадена е опцијата „-P“ на командната линија и променливата на околината PYTHONSAFEPATH за да се оневозможи автоматското прикачување на потенцијално небезбедните патеки на датотеки до sys.path.
  • Алатката py.exe за платформата Windows е значително подобрена, додавајќи поддршка за синтаксата „-V:“. / " како додаток на "- . "
  • Многу макроа во C API се претвораат во редовни или статични вградени функции.
  • Модулите uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev и sunau се застарени и ќе бидат отстранети во модулите 3.13 ослободување. Отстранетите функции на PyUnicode_Encode*.

Извор: opennet.ru

Додадете коментар