Какое влияние Python 3.9 окажет на будущее программирования на Python.

Выпущенный в понедельник 5 октября 2020 года Python 3.9 содержит множество интересных новых функций.

В этой статье мы сосредоточимся на следующем:

  1. Годовой цикл выпуска Python
  2. Улучшения переводчика
  3. Новые встроенные функции
  4. Новые возможности синтаксиса

Мне, честно говоря, не нравится читать эти статьи о том, как умирает Python, например Python медленно теряет свое очарование Джейсона Дсузы; хотя они очень самоуверенны.

Новый выпуск python показывает, насколько он жив и почему с этого момента нам следует ожидать гораздо большего. Прочтите со мной, чтобы узнать, как…

Годовой цикл выпуска Python

Python 3.9 знаменует начало нового календаря выпусков, сокращая цикл с полутора лет до 12 месяцев.

Это значительно ускорит импульс выпуска настолько, что мы, возможно, будем видеть новый выпуск в октябре каждого года.

Это изменение приносит с собой ряд преимуществ, например, уменьшение размера последующих выпусков, что, следовательно, будет способствовать более быстрому исправлению ошибок в руках пользователей; просто упомянуть несколько.

Подробнее о PEP 602.

Улучшения переводчика

Новый парсер PEG для CPython

Python 3.9 примет новый синтаксический анализатор на основе PEG вместо текущего LL (1). Мы ожидаем, что Python 3.9 будет быстрее, так как новый синтаксический анализатор PEG будет демонстрировать экспоненциальную временную производительность в худшем случае по сравнению с синтаксическими анализаторами LL (1). Это верно, потому что синтаксические анализаторы PEG имеют бесконечный просмотр вперед, это означает, что они могут рассматривать произвольное количество токенов, прежде чем принимать решение о правиле.

Производительность нового синтаксического анализатора настроена так, чтобы она была в пределах 10% от старого синтаксического анализатора как по скорости, так и по потреблению памяти .

Был проведен канонический тест файла со 100000 строками, бесконечно повторяющими следующие три строки:

1 + 2 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + ((((((11 * 12 * 13 * 14 * 15 + 16 * 17 + 18 * 19 * 20))))))
2*3 + 4*5*6
12 + (2 * 3 * 4 * 5 + 6 + 7 * 8)

Результаты этого теста тестового файла показали, что новый синтаксический анализатор работает быстрее и использует меньше памяти, чем текущий синтаксический анализатор.

  • Разбор и компиляция в байт-код занимает 1,28 секунды (новое).
  • Разбор и компиляция занимают 1,44 секунды (текущий парсер).

Однако мы не увидим особой активности от нового парсера до Python 3.10. Согласно PEP 617, переход на новый парсер будет следовать хорошо продуманному плану миграции.

Новые математические функции

Встроенный математический модуль имеет новые потрясающие функции.

GCD - этот метод теперь может обрабатывать несколько аргументов вместо первых двух.

LCM - этот новый метод возвращает наименьшее общее кратное указанных аргументов.

Nextafter - функция math.nextafter() возвращает следующее представимое значение с плавающей запятой после x в направлении y. Если y меньше x, эти функции вернут наибольшее представимое число меньше x.

ULP - расшифровывается как «Единица на последнем месте». Функция возвращает значение младшего бита числа с плавающей запятой x.

Использование

>>> import math
>>> # gcd
>>> math.gcd(36,72,24)
12
>>> #lcm
>>> math.lcm(36,72,24)
72

Новые встроенные функции

removeprefix () и методы строки removeuffix ()

removeprefix('prefix') и removesuffix('suffix) - это строковые методы, которые можно использовать для простого удаления нежелательного префикса или суффикса соответственно.

Использование

>>> text = 'Python 3.9'
>>> text.removeprefix('Python ') 
# returns '3.9'
>>> text.removesuffix(' 3.9') 
# returns 'Python'

Может возникнуть путаница между lstrip/rstrtip и новым remove(prefix/suffix), по этой причине следует учитывать следующие различия.

lstrip / rstrip:

  • Аргумент интерпретируется как набор символов.
  • Символы многократно удаляются с соответствующего конца строки.

удалить (префикс / суффикс):

  • Аргумент интерпретируется как непрерывная подстрока.
  • Удаляется не более одной копии префикса / суффикса.

Новые возможности синтаксиса

Словарь Союза

Раньше у нас были только методы dict.update и {**d1, **d2} объединения словарей. Теперь у нас есть еще два оператора для объединения.

Объединение словарей |

>>> old = {'one':1, 'two':2, 'three':3}
>>> new = {'four':4, 'five':5}
>>> old | new 
{'one':1, 'two':2, 'three':3, 'four':4, 'five':5}

Операторы обновления |=

>>> old = {'one':1.0, 'two':2.0, 'three':3}
>>> new = {'one':1.0, 'two':2.0, 'three':3.0, 'four':4.0}
>>> old |= new
{'one':1.0, 'two':2.0, 'three':3.0, 'four':4.0}

Обновление с помощью итераций

Еще одна интересная особенность оператора обновления словаря |= заключается в том, что он может использовать итерации для обновления словаря.

>>> even = {'two':2, 'four':4}
>>> other = [('six', 6), ('eight', 8)]
>>> even |= other
{'two':2, 'four':4, 'six':6, 'eight':8}

Вывод

Каждый новый выпуск Python содержит функции, которые делают его более быстрым и мощным. Python 3.9, несомненно, окажет очень большое влияние на последующие выпуски, начиная с Python 3.10, установленного на октябрь 2021 года.

Сообщество питонов стремительно растет, и я считаю, что программирование на Python никогда не было более живым.

Скачайте, чтобы пользоваться новыми функциями.

Вы можете обратиться ко мне с вопросами или предложениями в Twitter.

Спасибо за чтение!