Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров12K

В официальном блоге языка 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")
  • в модуль typing добавили новый оператор, реализующий выбор из двух типов:

# Было 
def square(number: Union[int, float]) -> Union[int, float]:
    return number ** 2

# Стало 
def square(number: int | float) -> int | float:
    return number ** 2
  • функция 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() argument 2 is longer than argument 1
  • для целых чисел появился метод bit_count(), который возвращает количество единиц в двоичном представлении числа:

>>> 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 месяцев разработчики будут добавлять новые возможности и исправлять ошибки. После этого ветка на три месяца перейдет в стадию бета-тестирования.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 12: ↑12 и ↓0+12
Комментарии3

Другие новости

Ближайшие события