Выпуск языка программирования Python 3.9
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
После года разработки представлен значительный выпуск языка программирования Python 3.9. Python 3.9 стал первым выпуском после перехода проекта на новый цикл подготовки и сопровождения релизов. Новые значительные выпуски теперь будут формироваться раз в год, а корректирующие обновления выпускаться раз в два месяца. Каждая значительная ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.
Работа над новой веткой теперь начинается за пять месяцев до релиза очередной ветки, т.е. одновременно с выпуском Python 3.9 началось альфа-тестирование ветки Python 3.10. Ветка Python 3.10 будет находиться на стадии альфа-выпусков в течение семи месяцев, во время которых будут добавляться новые возможности и производиться исправление ошибок. После этого в течение трёх месяцев будет проводиться тестирование бета-версий, во время которого добавление новых возможностей будет запрещено и всё внимание будет уделяться исправлению ошибок. Последние два месяца перед релизом ветка будет находится на стадии кандидата в релизы, на которой будет выполнена финальная стабилизация.
Среди добавленных новшеств в Python 3.9:
- В словарях, определённых при помощи встроенного класса dict, появилась поддержка операторов слияния "|" и обновления "|=", которые дополняют методы {**d1, **d2} и dict.update, ранее предлагавшиеся для объединения словарей.
>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
- Во встроенную коллекцию типов включены list, dict и tuple, которые можно использовать как базовые типы без импорта из модуля typing. Т.е. вместо typing.List, typing.Dict и typing.Tuple теперь можно указывать
просто list, dict и tuple:
def greet_all(names: list[str]) -> None:
for name in names:
print("Hello", name)
- Предоставлены гибкие средства для аннотирования функций и переменных. Для прикрепления аннотаций в модуль typing добавлен новый тип Annotated, расширяющий существующие типы дополнительными метаданными, которые могут использоваться при статическом анализе или для оптимизаций во время выполнения. Для доступа к метаданным из кода в метод typing.get_type_hints() добавлен параметр include_extras.
charType = Annotated[int, ctype("char")]
UnsignedShort = Annotated[int, struct2.ctype('H')]
- Смягчены грамматические требования к декораторам - любое выражение, подходящее для использование в блоках if и while, теперь может быть использовано как декоратор. Изменение позволило заметно улучшить читаемость кода PyQt5 и упростить сопровождение данного модуля:
Было:
@buttons[0].clicked.connect
Теперь можно писать:
button_0 = buttons[0]
@button_0.clicked.connect
- В стандартную библиотеку добавлен модуль zoneinfo, включающий информацию из базы часовых поясов IANA.
- Предложены новые методы для удаления префиксов и окончаний строк - str.removeprefix(prefix) и str.removesuffix(suffix). Методы добавлены в объекты str, bytes, bytearray и collections.UserString.
>>> s = "FooBar"
>>> s.removeprefix("Foo")
'Bar'
- Задействован новый парсер PEG (Parsing Expression Grammar), который пришёл на смену парсеру LL(1). Применение нового парсера позволило избавиться от некоторых "хаков", используемых для обхода ограничений в LL(1), и существенно снизило трудозатраты на сопровождение парсера. По производительности новый парсер находится примерно на одном уровне с прошлым, но значительно опережает его в плане гибкости, что позволяет более свободно чувствовать себя при проектировании новых возможностей языка. Код старого парсера пока сохранён и может быть возвращён при помощи флага "-X oldparser" или переменной окружения "PYTHONOLDPARSER=1", но будет удалён в выпуске 3.10.
- Предоставлена возможность доступа методов Си-расширений к состоянию модулей, в которых они определены, с применением прямого разыменования указателей вместо поиска состояния модуля при помощи функции PyState_FindModule. Изменение позволяет повысить производительность модулей на Си за счёт снижения или полного исключения накладных расходов на проверку состояния модуля. Для ассоциирования модуля с классом предложена Си-функция PyType_FromModuleAndSpec(), для получения модуля и его состояния Си-функции PyType_GetModule() и PyType_GetModuleState(), а для предоставления методу доступа к классу, в котором он определён, Си-функция PyCMethod и флаг METH_METHOD.
- Сборщик мусора избавлен от блокировки коллекций, включающих воскрешённые объекты, которые остаются доступными извне после запуска финализатора.
- Добавлен метод os.pidfd_open, позволяющий использовать подсистему ядра Linux "pidfd" для обработки ситуации с повторным использованием PID (pidfd связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID).
- Поддержка спецификации Unicode обновлена до версии 13.0.0.
- В модуле graphlib реализована поддержка топологического поиска в графе.
- Устранена утечка памяти при повторной инициализации интерпретатора Python в одном процессе.
- Проведена оптимизация производительности встроенных типов range, tuple, set, frozenset, list и dict, реализованная за счёт применения протокола быстрого вызова Vectorcall для более быстрого обращения к объектам, написанным на языке Си.
- Модули _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time и _weakref переведены на загрузку с инициализацией в несколько стадий.
- Модули стандартной библиотеки audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios и zlib переведены на использование ограниченного стабильного ABI, который решает проблему работоспособности сборок модулей-расширений для разных версий Python (при обновлении версии не требуется пересобирать модули-расширения, и модули собранные для 3.9, смогут работать в ветке 3.10).
- Добавлены новые оптимизации, например, повышена производительность обработчиков сигналов в многопоточных приложениях, повышена скорость работы модуля subprocess в окружении FreeBSD и ускорено присвоение временных переменных (назначение переменной в выражении "for y in [expr]" теперь не уступает по производительности выражению "y = expr"). В целом большинство тестов показывают снижение производительности по сравнению с веткой 3.8 (ускорение наблюдается только в тестах write_local и write_deque):
Версия Python 3.4 3.5 3.6 3.7 3.8 3.9
-------------- --- --- --- --- --- ---
Variable and attribute read access:
read_local 7.1 7.1 5.4 5.1 3.9 4.0
read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
read_global 15.5 19.0 14.3 13.6 7.6 7.7
read_builtin 21.1 21.6 18.5 19.0 7.5 7.7
read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9
Variable and attribute write access:
write_local 8.7 9.3 5.5 5.3 4.3 [b]4.2[/b]
write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
write_global 19.7 21.2 18.0 18.0 15.8 17.2
write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7
Data structure read access:
read_list 24.2 24.5 20.8 20.8 19.0 21.1
read_deque 24.7 25.5 20.2 20.6 19.8 21.6
read_dict 24.3 25.7 22.3 23.0 21.0 22.5
read_strdict 22.6 24.3 19.5 21.2 18.9 21.6
Data structure write access:
write_list 27.1 28.5 22.5 21.6 20.0 21.6
write_deque 28.7 30.1 22.7 21.8 23.5 [b]23.2[/b]
write_dict 31.4 33.3 29.3 29.2 24.7 27.8
write_strdict 28.4 29.9 27.5 25.2 23.1 29.8
Stack (or queue) operations:
list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5
Timing loop:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3
- Удалены многие функции и методы Python 2.7, которые ранее были отмечены устаревшими и в прошлом выпуске приводили к выводу предупреждения DeprecationWarning, включая метод unescape() в html.parser.HTMLParser,
tostring() и fromstring() в array.array, isAlive() в threading.Thread, getchildren() и getiterator() в ElementTree,
json.loads(), sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() и base64.decodestring().
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://pythoninsider.blogspot...)
- OpenNews: Гвидо ван Россум предложил включить в Python операторы для сопоставления с образцом
- OpenNews: Проект Python намерен перевести отслеживание ошибок на GitHub
- OpenNews: Опубликован Python 2.7.18, последний выпуск ветки Python 2
- OpenNews: Python переходит на новый цикл формирования значительных выпусков
- OpenNews: Выпуск языка программирования Python 3.8
Похожие новости:
- [Python] Выход стабильной версии Python 3.9.0
- [Python, Машинное обучение, Искусственный интеллект, TensorFlow] Подборка статей о машинном обучении: кейсы, гайды и исследования за сентябрь 2020
- [Разработка веб-сайтов, Python, Django] Отношение один к одному: связывание модели пользователя с кастомной моделью профиля в Django (перевод)
- [Python] Формат таблиц в pandas
- [Python] Простейший голосовой помощник на Python
- [Тестирование IT-систем, Python, Тестирование веб-сервисов] Robot Framework vs Pytest
- [Python, Математика, Машинное обучение, Научно-популярное, Мозг] Новый способ изучения психотропных веществ с помощью ЭЭГ и нейронных сетей
- [Python, Машинное обучение] OpenVINO становится «серебряной пулей» хакатонов по компьютерному зрению
- [Data Mining, Python, Анализ и проектирование систем] Process Mining без PM4PY
- [MongoDB, Node.JS, Python] Top 10 Full Stack Development Companies to Check Out in 2020
Теги для поиска: #_python
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 06:00
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
После года разработки представлен значительный выпуск языка программирования Python 3.9. Python 3.9 стал первым выпуском после перехода проекта на новый цикл подготовки и сопровождения релизов. Новые значительные выпуски теперь будут формироваться раз в год, а корректирующие обновления выпускаться раз в два месяца. Каждая значительная ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей. Работа над новой веткой теперь начинается за пять месяцев до релиза очередной ветки, т.е. одновременно с выпуском Python 3.9 началось альфа-тестирование ветки Python 3.10. Ветка Python 3.10 будет находиться на стадии альфа-выпусков в течение семи месяцев, во время которых будут добавляться новые возможности и производиться исправление ошибок. После этого в течение трёх месяцев будет проводиться тестирование бета-версий, во время которого добавление новых возможностей будет запрещено и всё внимание будет уделяться исправлению ошибок. Последние два месяца перед релизом ветка будет находится на стадии кандидата в релизы, на которой будет выполнена финальная стабилизация. Среди добавленных новшеств в Python 3.9:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 06:00
Часовой пояс: UTC + 5