Эта статья описывает новые возможности и содержит список изменений Python 3.9 по сравнению с Python 3.8.
Введение
Дата релиза Python 3.9 — 5 октября 2020 года
Каждый релиз Python включает в себя новые и улучшенные функции, происходит оптимизация кода и устаревают разных функции, а иногда и целые библиотеки. В статье приведён не полный список изменений. Ниже будет подробно рассмотрен новый функционал, которые предлагает последняя версия Python.
Если вы хотите ознакомиться с полным списком изменений, обратитесь к официальной документации на Python.org
Новые возможности
Слияния и обновления словарей
Операторы merge (|) и update (|=) были добавлены в стандартный класс dict. Они дополняют существующие dict.update и {**a, **b} метод объединения словарей.
a = {"Ключ 1": "Значение 1", "Ключ 2": "Значение 2"} b = {"Ключ 3": "Значение 3", "Ключ 4": "значение 4"} a | b {'Ключ 1': 'Значение 1', 'Ключ 2': 'Значение 2', 'Ключ 3': 'Значение 3', 'Ключ 4': 'значение 4'} b | a {'Ключ 3': 'Значение 3', 'Ключ 4': 'значение 4', 'Ключ 1': 'Значение 1', 'Ключ 2': 'Значение 2'}
Полное описание доступно в PEP 584.
Удаления префиксов и суффиксов из строк
Для этого используются новые строковые методы str.removeprefix() и str.removesuffix(), они позволяют легко удалять ненужный префикс или суффикс из содержимого строки.
str = "https://egorovegor.ru str.removeprefix('https://') 'egorovegor.ru' str.removesuffix('.ru') 'https://egorovegor'
Полное описание доступно в PEP 616.
Упрощение указание типов для коллекций
В аннотациях доступно к использованию стандартные типы коллекций, например list и dict вместо импорта соответствующих типов (например, List или Dict) из модуля стандартной библиотеки typing. Некоторые другие типы в стандартной библиотеке теперь также являются общими, например, queue.Queue.
def get_all_city_id(city_id: list[int]) -> None: for c in city_id: print(c)
Новый парсер
В Python 3.9 появился новый парсер, основанный на PEG вместо LL. Скорость работы нового парсера примерно сравнима с производительностью старого, но формализм PEG более гибкий, чем LL, когда речь заходит о разработке новых возможностей языка. Мы начнем использовать эту гибкость в Python 3.10
Библиотека ast уже использует PEG
В Python 3.10 старый синтаксический анализатор будет удален, как и вся функциональность, которая от него зависит (в первую очередь, модуль синтаксического анализатора).
Только на Python 3.9 вы можете переключиться обратно на парсер LL, используя переключатель командной строки (-X oldparser) или переменную окружения (PYTHONOLDPARSER=1).
Полное описание доступно в PEP 617.
Список более мелких изменений
- Функция import() теперь поднимает исключение ImportError вместо ValueError, в ошибке указания относительного пути для импорта
- Теперь Python возвращает абсолютный путь имени файла, указанного в командной строке (ex: python3 script.py): атрибут __file__ модуля __main__ стал абсолютным, а не относительным путем.
- В режиме разработки Python и в отладочной сборке кодировка и аргументы об ошибках теперь проверяются на наличие операций кодирования и декодирования строк. Примеры: open(), str.encode() и bytes.decode().
- «Книга».replace(«текст», var, n) теперь возвращает var вместо пустой строки для всех ненулевых n.
- Любое валидное выражение теперь доступно для использования в качестве декоратора. Раньше грамматика была гораздо более ограниченной. PEP614
- Параллельный запуск aclose() / asend() / athrow() теперь запрещен, а запуск ag_running теперь отражает реальное состояние работы генератора асинхронизации.
Новые библиотеки
zoneinfo
Модуль zoneinfo внедряет поддержку базы данных временных поясов IANA в дефолтный набор батареек Python. Появляется метод zoneinfo.ZoneInfo, реализующий datetime.tzinfo, с подкрепленными данными о временном поясе системы.
from zoneinfo import ZoneInfo from datetime import datetime dt = datetime(2021, 1, 7, 23, 15, tzinfo=ZoneInfo("Europe/Moscow")) print(dt) 2021-01-07 23:15:00+03:00 dt.tzname() 'MSK'
graphlib
Добавлен новый модуль graphlib, который содержит класс graphlib.TopologicalSorter, предлагающий функциональность для выполнения топологической сортировки графиков.
Изменения в библиотеках
ftplib
FTP и FTP_TLS теперь поднимают исключение ValueError, если заданный таймаут для их конструктора равен нулю, чтобы предотвратить создание неблокирующего сокета.
http
Добавлены новые http статусы
- 103 EARLY_HINTS
- 418 IM_A_TEAPOT
- 425 TOO_EARLY
imaplib
IMAP4 и IMAP4_SSL теперь имеют дополнительный параметр таймаута для своих конструкторов. Также, метод open() теперь имеет опциональный параметр таймаута с этим изменением.
poplib
POP3 и POP3_SSL теперь поднимают исключение ValueError, если заданный таймаут для их конструктора равен нулю, чтобы предотвратить создание неблокирующего сокета.
smtplib
SMTP и SMTP_SSL теперь поднимает исключение ValueError, если заданный таймаут для их конструктора равен нулю, чтобы предотвратить создание неблокирующего сокета.
ipaddress
ipaddress теперь поддерживает IPv6 Scoped Addresses (IPv6 адрес с суффиксом %).
Скопированные IPv6 адреса могут быть разобраны с помощью ipaddress.IPv6Address. Если присутствует, то идентификатор зоны scope_id доступен через атрибут scope_id.
venv
Скрипты активации, предоставленные venv, теперь все последовательно указывают свою подсказку, всегда используя значение, указанное VENV_PROMPT. Раньше некоторые скрипты безоговорочно использовали VENV_PROMPT, другие только в случае, если это произошло (что было по умолчанию), и один из них использовал VENV_NAME.
Заключение
Мы рассмотрели основные изменения в языке программирования Python.
мне нравятся ваши новые новости что происходит в мире
Спасибо 🙂