Siterem

Создание сайтов под ключ

Пн-Вс: 12:00-22:00 (MSK)
Заказать звонок

Вышел язык программирования Python 3.10.0

В официальном блоге языка Python заявили о выходе новой версии и рассказали о списке актуальных изменений. Среди нововведений — улучшенный вывод ошибок, структурное сопоставление и более строгое итерирование.

Основные нововведения в Python 3.10.0:

  • добавлено структурное сопоставление шаблонов, позволяющее сравнивать переменные с одним из набором возможных значений. Реализация похожа на конструкцию switch/case, но с более широкими возможностями статической проверки типов:

def http_error(status): match status: case 400: return "Bad request" case 404: return "Not found" case 418: return "I'm a teapot" case _: return "Something's wrong with the internet"
print ("Hello"
print ("world") # Было File ".\test.py", line 2 print ("world?") ^
SyntaxError: invalid syntax # Стало File ".\test.py", line 1 print ("Hello" ^
SyntaxError: '(' was never closed

Для ошибок, связанных с опечатками в названиях атрибутов и имен переменных в функциях, добавили рекомендации по исправлению:

>>> collections.namedtoplo Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?
  • в операторе with можно использовать круглые скобки для разделения определения коллекции контекстных менеджеров на несколько строк. Можно не убирать запятую в последней строке:

with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): ...
  • в качестве шаблона можно использовать имя класса, после которого следует указать аргументы. Метод похож на конструкторы в других языках программирования и помогает записывать атрибуты в поля класса:

class Point: x: int y: int def location(point): match point: case Point(x=0, y=0): print("Origin is the point's location.") case Point(x=0, y=y): print(f"Y={y} and the point is on the y-axis.") case Point(x=x, y=0): print(f"X={x} and the point is on the x-axis.") case Point(): print("The point is located somewhere else on the plane.") case _: print("Not a point")
# Было def square(number: Union[int, float]) -> Union[int, float]: return number ** 2 # Стало def square(number: int | float) -> int | float: return number ** 2
>>> 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() argument 2 is longer than argument 1
>>> num = 2021
>>> bin(num) '0b11111100101'
>>> num.bit_count()
8
  • конструкторы str(), bytes() и bytearray() стали работать на 30-40% быстрее;

  • в модуль typing добавили оператор Concatenate и переменную ParamSpec, благодаря которым можно передать дополнительные данные для проверки типов с помощью Callable;

  • появились новые встроенные асинхронные функции aiter() и anext(), схожие с функциям iter() и next();

  • прекращена поддержка псевдонимов для абстрактных базовых классов из модуля collections;

  • удален старый парсер, на смену которому пришел PEG;

  • для сборки CPython теперь требуется OpenSSL 1.1.1 или более свежие версии;

  • для модулей hashlib и ssl добавили поддержку OpenSSL 3.0.0 и прекратили поддержку OpenSSL 1.1.1.

Одновременно с выходом Python 3.10.0 началось альфа-тестирование ветки Python 3.11. В течении 7 месяцев разработчики будут добавлять новые будут добавлять новые возможности и исправлять ошибки. После этого ветка на три месяца перейдет в стадию бета-тестирования.

Источник: habr.com

Обратный звонок

Оставьте свой телефон и мы свяжемся с Вами

Заявка принята, спасибо!
Мы вскоре свяжемся с Вами ;)