Release of the Python programming language 3.10

Po letu dni razvoja je bil predstavljen pomemben izdelek programskega jezika Python 3.10. Nova različica bo podprta eno leto in pol, nato pa bo tri in pol leta oblikovanih popravkov za odpravo vseh ranljivosti.

Hkrati se je začelo alfa testiranje različice Python 3.11 (v skladu z novim razporedom razvoja se delo na novi različici začne pet mesecev pred izdajo prejšnje različice in ob trenutku naslednje izdaje doseže fazo alfa testiranja). Različica Python 3.11 bo v fazi alfa izdaj sedem mesecev, med katerimi bodo dodajali nove funkcionalnosti in odpravljali napake. Po tem bo tri mesece potekalo beta testiranje, med katerim dodajanje novih funkcij ne bo dovoljeno, vsa pozornost pa bo usmerjena v odpravljanje napak. Zadnja dva meseca pred izdajo bo različica v fazi kandidatov za izdelek, v kateri bo izvedena končna stabilizacija.

Med novostmi, dodatimi v Python 3.10, so:

  • Uvedeni so bili operatorji „match“ in „case“ za ujemanje z vzorcem, ki izboljšujejo berljivost kode, poenostavljajo ujemanje poljubnih Python objektov in povečujejo zanesljivost kode zaradi možnosti razširjene statične preverjanja tipov. Izvedba je v veliki meri podobna operatorju „match“, ki ga zagotavljajo jeziki Scala, Rust in F#, ki primerja rezultat izvajanja določenega izraza s seznamom vzorcev, naštetih v blokih na podlagi operatorja „case“.

    def http_error(status): match status: case 400: return «Bad request» case 401|403|404: return «Not allowed» case 418: return «I’m a teapot» case _: return «Something else»

    Možnost razpakiranja objektov, vključno s tabelami, seznami in poljubnimi zaporedji za vezavo spremenljivk na podlagi obstoječih vrednosti. Dovoljeno je določanje vgrajenih predlog, uporaba dodatnih pogojev v predlogi 'if', uporaba mask ('[x, y, *rest]'), preslikavanje povezav ključ/vrednost (na primer, {"bandwidth": b, "latency": l} za pridobivanje vrednosti "bandwidth" in "latency" iz slovarja), pridobivanje podpredlog (operator ':='), uporaba poimenovanih konstant v predlogi. V razredih je mogoče prilagoditi vedenje pri ujemanju z metodo '__match__()'.

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Izvor") case Point(0, y): print(f"Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Nekje drugje") case _: print("Ni točka") match point: case Point(x, y) if x == y: print(f"Y=X pri {x}") case Point(x, y): print(f"Ni na diagonali") RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print("Vidim rdečo!") case GREEN: print("Trava je zelena") case BLUE: print("Počutim se modro :( ")

  • Omogočeno je uporabo okroglih oklepajev v operatorju with za razdelitev definicije zbirk kontekstnih upravljalnikov v več vrstic. Vključno je dovoljeno pustiti vejico po končnem kontekstnem upravljalniku v skupini: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): …
  • Izboljšano obveščanje o lokaciji v kodi napak, povezanih z nezaprtimi okroglimi oklepaji in narekovaji v nizovnih literali. Na primer, namesto obveščanja o napaki v sintaksi v naslednji konstrukciji, kazalec zdaj osvetli odprti okrugli oklepaj in obvešča o manjkajočem zapiralnem bloku. File "example.py", line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: '{' nikoli ni bil zaprt

    Dodane so dodatna specializirana sporočila o sintaktičnih napakah: manjkajoči znak ‘:’ pred blokom in v slovarjih, nepostavljanje nizarja v oklepaje, manjkajoča vejica v seznamih, navedba bloka ‘try’ brez ‘except’ in ‘finally’, uporaba ‘=’ namesto ‘==’ v primerjavah, navedba *-izrazov v f-nizih. Poleg tega je zagotovljeno označevanje celotnega problematičnega izraza, ne le njegovega začetka, in bolj jasno obveščanje o kontekstu napak, povezanih z nepravilnim postavljanjem zamikov. >>> def foo(): … if lel: … x = 2 Datoteka ‘’, vrstica 3 x = 2 ^ IndentationError: pričakovan je bil zamik po izjavi ‘if’ v vrstici 2

    Pri napakah, ki so posledica tipkarskih napak v imenih atributov in spremenljivk v funkciji, je zagotovljena priporočila s pravilnim imenom. >>> collections.namedtoplo Sledi napaka (zadnji klic je bil glede na): Datoteka ‘’, vrstica 1, v AttributeError: modul ‘collections’ nima atributa ‘namedtoplo’. Ali ste morda mislili: namedtuple?

  • Za orodja za odpravljanje napak in profiliranje so navedene natančne številke vrstic izvršenega kode v sledi napak.
  • Dodana je nastavitev sys.flags.warn_default_encoding za izpis opozorila o potencialnih napakah, povezanih z obdelavo v TextIOWrapper in open() datotek v kodiranju UTF-8 brez izrecnega določanja možnosti ‘encoding=»utf-8″‘ (privzeto se uporablja kodiranje ASCII). V novi različici je prav tako omogočeno določanje vrednosti ‘encoding=»locale»‘ za nastavitev kodiranja na podlagi trenutne lokalne nastavitve.
  • V modul typing, ki nudi sredstva za določanje tipov, je dodan nov operator, ki omogoča uporabljanje sintakse ‘X | Y’ za izbiro enega od tipov (tip X ali tip Y). def square(number: int | float) -> int | float: return number ** 2 ekvivalentno prej podprti konstrukciji: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • V modul typing je dodan operator Concatenate in spremenljivka ParamSpec, ki omogočata predajanje dodatnih informacij za statično preverjanje tipov pri uporabi Callable. V modul typing so prav tako dodane posebne vrednosti TypeGuard za označevanje funkcij zaščite tipov in TypeAlias za izrecno določanje psevdonima tipa. StrCache: TypeAlias = ‘Cache[str]’ # psevdonim tipa
  • В функции zip() реализован необязательный флаг «strict», который позволяет проверять одинаковую длину перебираемых аргументов. >>> 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 (most recent call last): … ValueError: zip() аргумент 2 длиннее аргумента 1
  • Предложены новые встроенные функции aiter() и anext() как асинхронные аналоги для функций iter() и next().
  • Работа конструкторов str(), bytes() и bytearray() ускорена на 30-40% при работе с мелкими объектами.
  • Сокращено количество операций импорта в модуле runpy. Команда «python3 -m имя_модуля» теперь запускается в среднем в 1.4 раза быстрее благодаря уменьшению импортируемых модулей с 69 до 51.
  • В инструкции LOAD_ATTR задействован механизм кэширования отдельных опкодов, что позволило ускорить работу с обычными атрибутами до 36%, а со слотами до 44%.
  • При сборке Python с опцией «—enable-optimizations» теперь включается режим «-fno-semantic-interposition», позволяющий ускорить работу интерпретатора до 30% по сравнению со сборкой с опцией «—enable-shared».
  • В модулях hashlib и ssl добавлена поддержка OpenSSL 3.0.0 и прекращена поддержка версий OpenSSL старше 1.1.1.
  • Удалён старый парсер, заменённый на парсер PEG (Parsing Expression Grammar) из предыдущей ветки. Удалён модуль formatter. Из API asyncio удалён параметр loop. Удалены методы, ранее объявленные устаревшими. Удалены функции Py_UNICODE_str*, манипулирующие строками Py_UNICODE*.
  • Объявлен устаревшим модуль distutils, который будет удалён в Python 3.12. Рекомендуется использовать вместо него модули setuptools, packaging, platform, shutil, subprocess и sysconfig. Структура wstr в PyUnicodeObject также переведена в устаревшие и запланированные для удаления.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster