Содержание страницы
Что нового в Python 3.16¶What’s new in Python 3.16
- Редактор:
Уточняется
В этой статье рассматриваются новые возможности Python 3.16 по сравнению с версией 3.15.
Полные сведения см. в журнале изменений.
Примечание
Пользователям предварительных версий следует знать, что этот документ находится в черновой форме. Он будет существенно обновляться по мере приближения выхода Python 3.16, поэтому стоит заглядывать сюда снова, даже после прочтения предыдущих версий.
Краткое описание – основные возможности выпуска¶Summary – release highlights
Новые возможности¶New features
Прочие изменения в языке¶Other language changes
Новые модули¶New modules
Пока нет.
Улучшенные модули¶Improved modules
curses¶
Добавлена поддержка нескольких терминалов в модуль
curses: новые функцииcurses.newterm(),curses.set_term()иcurses.new_prescr(), соответствующий объект screen и методwindow.use(). (Автор: Serhiy Storchaka; gh-90092.)Методы окон
cursesдля работы с символьными ячейками теперь принимают полную символьную ячейку – пробельный символ, за которым необязательно следуют комбинирующие символы – помимо одного целого числа или байтового символа. Это затрагиваетaddch(),bkgd(),bkgdset(),border(),box(),echochar(),hline(),insch()иvline(). Также добавлены методы чтения широких символовget_wstr()иin_wstr(), аналогиgetstr()иinstr(), возвращающиеstrвместоbytes, а также функции модуляcurses.erasewchar(),curses.killwchar()иcurses.wunctrl()– широкосимвольные аналогиcurses.erasechar(),curses.killchar()иcurses.unctrl(). В узкой сборке (не ncursesw) символьная ячейка содержит один символ без комбинирующих знаков, представимый в виде одного байта в кодировке окна, аin_wstr()возвращает его декодированный текст. (Автор: Serhiy Storchaka; gh-151757.)Функции и методы широких символов
curses–get_wch(),get_wstr(),curses.unget_wch(),curses.erasewchar(),curses.killwchar()иcurses.wunctrl()– теперь также работают, когда Python собран без библиотеки curses, поддерживающей широкие символы, в 8-битной локали, где каждый символ представляет собой один байт в соответствующей кодировке.curses.ungetch()теперь также принимает строку из одного символа, напримерcurses.unget_wch(); в широкосимвольной сборке это может быть любой символ (ранее многобайтовый символ вызывалOverflowError). (Автор: Serhiy Storchaka; gh-152470.)Добавлен
curses.nofilter(), отменяющий действиеcurses.filter(). (Автор: Serhiy Storchaka; gh-151744.)Добавлены функции
curses:curses.alloc_pair(),curses.find_pair(),curses.free_pair()иcurses.reset_color_pairs()для динамического управления цветовыми парами, доступные при сборке с широкосимвольной ncurses с поддержкой расширенных цветов. (Автор: Serhiy Storchaka; gh-151774.)Добавлены функции
cursesи методы окон, сообщающие состояние, которое ранее можно было только установить, напримерcurses.window.is_keypad(),curses.window.getparent()иcurses.is_cbreak(), доступные при сборке с ncurses сNCURSES_EXT_FUNCS. (Автор: Serhiy Storchaka; gh-151776.)Добавлены методы окна
curses:attr_get(),attr_set(),attr_on(),attr_off()иcolor_set(), которые передают цветовую пару отдельным аргументом вместо встраивания её в значение атрибута, а также соответствующие константы атрибутовWA_*. (Автор: Serhiy Storchaka; gh-152219.)Добавлен тип
curses.complexchar, представляющий стилизованную символьную ячейку (её текст, атрибуты и цветовую пару), и методы окнаin_wch()иgetbkgrnd(), возвращающие такой объект – аналогиinch()иgetbkgd(). Методы символьных ячеек, такие какaddch()иborder(), теперь также принимаютcomplexchar. Они работают независимо от того, собран ли Python с библиотекой curses, поддерживающей широкие символы; в узкой сборке ячейка содержит один символ, представимый в виде одного байта в кодировке окна (поэтому поддерживаются только 8-битные локали). (Автор: Serhiy Storchaka; gh-152233.)Добавлен тип
curses.complexstr– неизменяемая последовательность стилизованных ячеек (строковый аналогcomplexchar) и метод окнаin_wchstr(), возвращающий такой объект. Методы строковых ячеекaddstr(),addnstr(),insstr()иinsnstr()теперь также принимаютcomplexstr. Как иcomplexchar, он работает независимо от того, собран ли Python с библиотекой curses, поддерживающей широкие символы. (Автор: Serhiy Storchaka; gh-152233.)Добавлен метод окна
curses:dupwin(), возвращающий новое окно, которое является независимой копией существующего. (Автор: Serhiy Storchaka; gh-152258.)Добавлены функции
curses:scr_dump(),scr_restore(),scr_init()иscr_set(), которые сохраняют весь экран в файл и восстанавливают его. (Автор: Serhiy Storchaka; gh-152260.)Добавлены функции мягких клавиш-меток в модуль
curses, управляющие строкой меток вдоль нижней строки экрана:slk_init(),slk_set(),slk_label(),slk_refresh(),slk_noutrefresh(),slk_clear(),slk_restore(),slk_touch(), функции атрибутовslk_attron(),slk_attroff(),slk_attrset(),slk_attr(),slk_attr_on(),slk_attr_off(),slk_attr_set()иslk_color(). (Автор: Serhiy Storchaka; gh-152263.)Добавлена функция
curses.term_attrs(), возвращающая поддерживаемые видеоатрибуты в виде значений WA_* – аналогcurses.termattrs(). (Автор: Serhiy Storchaka; gh-152332.)Добавлены функции управления клавишами
curses:define_key(),key_defined()иkeyok(), доступные при сборке с ncurses сNCURSES_EXT_FUNCS. (Автор: Serhiy Storchaka; gh-152334.)Добавлены функция
curses.has_mouse()и методcurses.window.mouse_trafo(), завершающие интерфейс мышиcurses. (Автор: Serhiy Storchaka; gh-152325.)curses.textpad.Textboxтеперь поддерживает ввод и считывание всего диапазона Unicode, включая комбинирующие символы, если curses собран с поддержкой широких символов. (Автор: Serhiy Storchaka; gh-133031.)
gzip¶
gzip.open()теперь принимает необязательный аргументmtime, который передаётся конструктору классаGzipFile. (Автор: Marin Misur; gh-91372.)
io¶
Добавлен метод
io.BytesIO.peek()для чтения без перемещения позиции. (Автор: Marcel Martin; gh-90533.)
imaplib¶
Добавлен метод
id(), обёртка для командыID(RFC 2971). (Автор: Serhiy Storchaka; gh-98092.)Добавлен метод
move(), обёртка для командыMOVE(RFC 6851). (Автор: Serhiy Storchaka; gh-77508.)Добавлен метод
login_plain(), выполняющий аутентификацию с помощью механизма SASLPLAIN(RFC 4616) и поддерживающий не-ASCII имена пользователей и пароли. (Автор: Przemysław Buczkowski и Serhiy Storchaka; gh-89869.)
logging¶
TimedRotatingFileHandlerтеперь использует время создания вместо времени последнего изменения существующего файла журнала в качестве основы для первой ротации после создания обработчика, если это поддерживается ОС и файловой системой. Это позволяет использовать его в короткоживущих программах, которые запускаются и завершаются до истечения интервала ротации. (Автор: Iván Márton и Serhiy Storchaka; gh-84649.)
lzma ¶
Добавлена поддержка новых фильтров BCJ ARM64 и RISC-V через
lzma.FILTER_ARM64иlzma.FILTER_RISCV. Обратите внимание, что новые фильтры будут работать только в том случае, если их поддерживает библиотека времени выполнения. Фильтр ARM64 требуетlzma5.4.0 или новее, а RISC-V – 5.6.0 или новее. (Автор: Chien Wong; gh-115988.)
math¶
Добавлены тригонометрические функции, работающие в единицах полуоборотов, а не радианов. Новые функции
math.acospi(),math.asinpi(),math.atanpi()иmath.atan2pi()возвращают углы в полуоборотах. Новые функцииmath.cospi(),math.sinpi()иmath.tanpi()принимают аргументы в виде углов в полуоборотах. Эти функции рекомендованы стандартом IEEE 754-2019 и стандартизированы в C23. (Автор: Jeff Epler; gh-150534.)
os¶
Добавлена
os.pidfd_getfd()для дублирования файлового дескриптора из другого процесса через pidfd. Доступно на Linux 5.6+. (Автор: Maurycy Pawłowski-Wieroński в gh-149464.)
re¶
reтеперь поддерживает операции над множествами и вложенные множества в символьных классах, как описано в Unicode Technical Standard #18: разность множеств ([A--B]), пересечение ([A&&B]) и объединение ([A||B]), где операндом может быть вложенное множество, записанное в квадратных скобках. Например,[a-z--[aeiou]]соответствует строчной согласной букве ASCII. (Автор: Serhiy Storchaka в gh-152100.)Регулярные выражения теперь поддерживают экранирования свойств Unicode
\p{...}и\P{...}, которые сопоставляют символ по свойству Unicode – например,\p{Lu}(заглавная буква),\p{Cased}или\p{ASCII}. Список поддерживаемых свойств см. в синтаксисе регулярных выражений. (Автор: Serhiy Storchaka в gh-95555.)
shlex¶
Добавлен параметр, передаваемый только по ключу, force в
shlex.quote()для принудительного заключения строки в кавычки, даже если она уже безопасна для оболочки без кавычек. (Автор: Jay Berry в gh-148846.)
tkinter¶
Добавлено много методов
tkinter.ttk.Treeview, обёртывающих расширенные команды виджетаttk::treeviewиз Tk 9.1, таких какsort(),search(),expand(),collapse(),hide(),unhide(), а также методы для фокуса ячейки, выделения и разметки. Методыexpand()иcollapse()(без рекурсии) также работают на Tk старше 9.1. (Автор: Serhiy Storchaka в gh-151910.)Добавлены новые методы
tkinter.Text:edit_canundo()иedit_canredo(), которые возвращают, возможна ли отмена (undo) или повтор (redo). (Автор: Serhiy Storchaka в gh-151674.)Добавлены новые методы
tkinter.Text:sync()иpendingsync(), которые управляют синхронизацией отображаемого представления с базовым текстом и сообщают о ней. (Автор: Serhiy Storchaka в gh-151675.)Добавлен метод
ttk.Style.theme_styles, который возвращает список стилей, определённых в теме. (Автор: Serhiy Storchaka в gh-151920.)Добавлены новые методы
tkinter.Canvas:rchars(), который заменяет текст или координаты элементов холста, иrotate(), который вращает координаты элементов холста. (Автор: Serhiy Storchaka в gh-151876.)Добавлен метод
validate()в виджетыtkinter.Entryиtkinter.Spinbox, который принудительно выполняет проверочную команду. (Автор: Serhiy Storchaka в gh-151878.)Добавлены метод
tkinter.Menu.postcascade(), а также методыtk_scaling()иtk_inactive(), которые соответственно запрашивают или устанавливают коэффициент масштабирования экрана и сообщают время бездействия пользователя. (Автор: Serhiy Storchaka в gh-151881.)Добавлены новые методы управления окнами:
winfo_isdark()(обнаружение тёмной темы),wm_iconbadge()(значок приложения) иwm_stackorder()(порядок расположения окон верхнего уровня). (Автор: Serhiy Storchaka в gh-151874.)Добавлены методы
tk_appname(),tk_useinputmethods()иtk_caret(), предоставляющие доступ к имени отправки приложения, состоянию X Input Methods и положению курсора метода ввода. (Автор: Serhiy Storchaka в gh-151886.)Добавлена поддержка дополнительных опций в методах
tkinter.PhotoImage: параметр format вput(), параметр metadata вput(), параметрыread(),write()иdata(), а также параметр withalpha вget(). (Автор: Serhiy Storchaka в gh-151890.)Добавлен метод
redither(), который пересчитывает изображение с дизерингом, когда его данные были переданы частями. (Автор: Serhiy Storchaka в gh-151888.)tkinter.OptionMenuтеперь принимает произвольные опцииtkinter.Menubuttonв качестве именованных аргументов, которые также могут переопределять его внешний вид по умолчанию. (Автор: Serhiy Storchaka в gh-101284.)Диалоги
tkinter.simpledialogбыли модернизированы, чтобы соответствовать внешнему виду и поведению нативных диалогов Tk. Диалогиtkinter.simpledialog.SimpleDialog,askinteger(),askfloat()иaskstring()теперь строятся из тематических виджетовtkinter.ttkвместо классических виджетовtkinter; базовый классtkinter.simpledialog.Dialogпо-прежнему по умолчанию использует классические виджеты для совместимости. Оба классаDialogиSimpleDialogполучили параметр use_ttk, который выбирает между классическими виджетами Tk и тематическими виджетами ttk.SimpleDialogтакже получил параметры bitmap и detail, рисует стандартные значки тематическими изображениями в версии ttk и принимает сопоставления параметров кнопок как записи buttons. (Автор: Serhiy Storchaka в gh-59396.)Диалог
tkinter.filedialog.FileDialogи его подклассыtkinter.filedialog.LoadFileDialogиtkinter.filedialog.SaveFileDialogтеперь по умолчанию строятся из тематических виджетовtkinter.ttkвместо классических виджетовtkinterи получили параметр use_ttk для выбора между ними. (Автор: Serhiy Storchaka в gh-59396.)tkinter.font.Fontтеперь может оборачивать описание шрифта без создания нового именованного шрифта, передавая его как font с помощьюexists=Trueи без name. Это позволяет избежать потери точности вactual(),measure()иmetrics(). (Автор: Serhiy Storchaka в gh-143990.)
xml¶
Добавлена поддержка множества многобайтовых кодировок в
XML parser: «cp932», «cp949», «cp950», «Big5», «EUC-JP», «GB2312», «GBK», «johab» и «Shift_JIS». Добавлена частичная поддержка (только символы BMP) для многобайтовых кодировок «Big5-HKSCS», «EUC_JIS-2004», «EUC_JISX0213», «Shift_JIS-2004», «Shift_JISX0213», «utf-8-sig» и нестандартных псевдонимов, таких как «UTF8» (без дефиса). Теперь парсер вызываетValueErrorдля известных неподдерживаемых многобайтовых кодировок, таких как «ISO-2022-JP» или «raw-unicode-escape», вместо того чтобы завершаться ошибкой позже при встрече с не-ASCII данными. (Автор: Serhiy Storchaka в gh-62259.)
zipfile¶
Добавлены
ZipFile.remove()для удаления элемента из центрального каталога архива иZipFile.repack()для освобождения места, занятого локальными записями файлов удалённых элементов. (Автор: Danny Lin в gh-51067.)
Оптимизации¶Optimizations
re¶
Экранирования символьных классов (
\d,\D,\s,\S,\wи\W) вне набора символов, а также наборы символов, содержащие одно такое экранирование (например,[\d]или[^\s]), теперь компилируются в один опкодCATEGORYвместо того, чтобы быть обёрнутыми в блокIN. Это ускоряет сопоставление таких шаблонов, как\d+, и уменьшает размер скомпилированного байт-кода. (Автор: Serhiy Storchaka в gh-152033 и Pieter Eendebak в gh-152056.)
module_name¶
TODO
Удалено¶Removed
annotationlib¶
Метод
annotationlib.ForwardRef._evaluate(), который устарел с Python 3.14. Вместо него используйтеannotationlib.ForwardRef.evaluate()илиtyping.evaluate_forward_ref().
array¶
Код формата
'u'(wchar_t), устаревший в документации с Python 3.3 и во время выполнения с Python 3.13. Вместо него используйте код формата'w'(Py_UCS4, всегда 4 байта).
asyncio¶
asyncio.iscoroutinefunction(), устаревшее с Python 3.14. Вместо него используйтеinspect.iscoroutinefunction().Система политик цикла событий, включая классы
asyncio.AbstractEventLoopPolicy,asyncio.DefaultEventLoopPolicy,asyncio.WindowsSelectorEventLoopPolicyиasyncio.WindowsProactorEventLoopPolicy, а также функцииasyncio.get_event_loop_policy()иasyncio.set_event_loop_policy(), устарела с Python 3.14. Вместо неё используйтеasyncio.run()илиasyncio.Runnerс собственной loop_factory.
functools¶
Вызов реализации
functools.reduce()на Python с function или sequence в качестве именованных аргументов устарел начиная с Python 3.14.
logging¶
Поддержка пользовательских обработчиков журнала с аргументом strm устарела и будет удалена в Python 3.16. Вместо этого определяйте обработчики с аргументом stream.
mimetypes¶
Допустимые расширения начинаются с точки «.» или пусты для
mimetypes.MimeTypes.add_type(). Расширения без точки теперь вызываютValueError.
shutil¶
Исключение
ExecErrorустарело с Python 3.14. Оно не использовалось ни одной функцией вshutilначиная с Python 3.4. (Автор: Stan Ulbrych в gh-149567.)
symtable¶
Метод
symtable.Class.get_methods()устарел с Python 3.14.
sys¶
Функция
_enablelegacywindowsfsencoding()устарела с Python 3.13. Вместо неё используйте переменную окруженияPYTHONLEGACYWINDOWSFSENCODING. (Автор: Stan Ulbrych в gh-149595.)
sysconfig¶
Функция
sysconfig.expand_makefile_vars()устарела с Python 3.14. Вместо неё используйте аргументvarsфункцииsysconfig.get_paths(). (Автор: Stan Ulbrych в gh-149499.)
tarfile¶
Недокументированный и неиспользуемый атрибут
tarfile.TarFile.tarfileустарел начиная с Python 3.13.
Устарело¶Deprecated
Новые устаревания¶New deprecations
-
Мягко устаревшие с Python 3.3
abc.abstractclassmethod,abc.abstractstaticmethodиabc.abstractpropertyтеперь вызываютDeprecationWarning. Эти классы будут удалены в Python 3.21, вместо них используйтеabc.abstractmethod()сclassmethod(),staticmethod()иpropertyсоответственно.
ast:Классы
slice,Index,ExtSlice,Suite,Param,AugLoadиAugStore, устаревшие с Python 3.9, больше не импортируютсяfrom ast import *и выдают предупреждение об устаревании при использовании. Эти классы планируется удалить в Python 3.21. Данные типы не создаются парсером и не принимаются генератором кода.Свойство
dimsобъектовast.Tuple, устаревшее с Python 3.9, теперь выдает предупреждение об устаревании при использовании. Это свойство планируется удалить в Python 3.21. Вместо него используйтеast.Tuple.elts.
-
Мягкое устаревание с Python 3.15, сейчас использование кодов типов
'F'и'D'устарело. Эти коды будут удалены в Python 3.21. Вместо них используйте двухбуквенные формы'Zf'и'Zd'. (Автор: Sergey B Kirpichev в gh-121249.)
-
Приватное имя
tempfile._TemporaryFileWrapperустарело и будет удалено в Python 3.21. Вместо него используйте новое публичноеtempfile.TemporaryFileWrapper, которое является типом возвратаtempfile.NamedTemporaryFile().
Запланировано к удалению в Python 3.17¶Pending removal in Python 3.17
-
strptime()вызовы со строкой формата, содержащей%e(день месяца) без указания года. Это объявлено устаревшим начиная с Python 3.15. (Автор: Stan Ulbrych в gh-70647.)
-
collections.abc.ByteStringзапланирован к удалению в Python 3.17.Используйте
isinstance(obj, collections.abc.Buffer)для проверки, реализует лиobjпротокол буфера во время выполнения. Для использования в аннотациях типов используйтеBufferили объединение, которое явно указывает типы, поддерживаемые вашим кодом (например,bytes | bytearray | memoryview).ByteStringизначально задумывался как абстрактный класс, который должен был служить супертипом как дляbytes, так и дляbytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляромByteString, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие какmemoryview, также никогда не рассматривались как подтипыByteString(ни во время выполнения, ни статическими проверками типов).См. PEP 688 для получения подробностей. (Автор: Shantanu Jain в gh-91896.)
-
Передача кодировок, не являющихся ASCII, в
encodings.normalize_encoding()объявлена устаревшей и запланирована к удалению в Python 3.17. (Автор: Stan Ulbrych в gh-136702.)
-
webbrowser.MacOSXOSAScriptобъявлен устаревшим в пользуwebbrowser.MacOS. (gh-137586)
-
До Python 3.14 старые объединения реализовывались с помощью приватного класса
typing._UnionGenericAlias. Этот класс больше не нужен для реализации, но он сохранён для обратной совместимости, его удаление запланировано на Python 3.17. Пользователям следует использовать документированные вспомогательные средства интроспекции, такие какtyping.get_origin()иtyping.get_args(), вместо того чтобы полагаться на детали приватной реализации.typing.ByteString, устаревший с Python 3.9, запланирован к удалению в Python 3.17.Используйте
isinstance(obj, collections.abc.Buffer)для проверки, реализует лиobjпротокол буфера во время выполнения. Для использования в аннотациях типов используйтеBufferили объединение, которое явно указывает типы, поддерживаемые вашим кодом (например,bytes | bytearray | memoryview).ByteStringизначально задумывался как абстрактный класс, который должен был служить супертипом как дляbytes, так и дляbytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляромByteString, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие какmemoryview, также никогда не рассматривались как подтипыByteString(ни во время выполнения, ни статическими проверками типов).См. PEP 688 для получения подробностей. (Автор: Shantanu Jain в gh-91896.)
-
Методы
tkinter.Variable:trace_variable(),trace()(псевдонимtrace_variable()),trace_vdelete()иtrace_vinfo(), устаревшие с Python 3.14, запланированы к удалению в Python 3.17. Используйтеtrace_add(),trace_remove()иtrace_info()вместо них. (Автор: Serhiy Storchaka в gh-120220.)
Запланировано удаление в Python 3.18¶Pending removal in Python 3.18
Запланировано к удалению в Python 3.19¶Pending removal in Python 3.19
-
В конструкторах хеш-функций, таких как
new(), или прямых конструкторах, названных по имени хеша, таких какmd5()иsha256(), их необязательный параметр начальных данных мог также передаваться как именованный аргумент с именемdata=илиstring=в различных реализацияхhashlib.Поддержка имени именованного аргумента
stringтеперь устарела и будет удалена в Python 3.19.До Python 3.13 именованный параметр
stringне поддерживался правильно в зависимости от реализации хеш-функций на стороне бэкенда. Предпочтительно передавать начальные данные как позиционный аргумент для максимальной обратной совместимости.
-
http.cookies.Morsel.js_output()устарело и будет удалено в Python 3.19.http.cookies.BaseCookie.js_output()устарело и будет удалено в Python 3.19.
-
Изменение
IMAP4.fileтеперь устарело и будет удалено в Python 3.19. Это свойство теперь не используется, и изменение его значения не приводит к автоматическому закрытию текущего файла.До Python 3.14 это свойство использовалось для реализации соответствующих методов
read()иreadline()дляIMAP4, но с тех пор это уже не так.
Ожидается удаление в Python 3.20¶Pending removal in Python 3.20
Вызов метода
__new__()объектаstruct.Structбез аргумента format устарел и будет удалён в Python 3.20. Вызов__init__()метода для инициализированных объектовStructустарел и будет удалён в Python 3.20.(Вклад: Sergey B Kirpichev и Serhiy Storchaka в gh-143715.)
Атрибуты
__version__,versionиVERSIONбыли объявлены устаревшими в этих модулях стандартной библиотеки и будут удалены в Python 3.20. Вместо них используйтеsys.version_info.ctypes.macholibdecimal(используйтеdecimal.SPEC_VERSIONвместо)logging(__date__также устарел)xml.sax.expatreader
(Вклад: Hugo van Kemenade и Stan Ulbrych в gh-76007.)
Устаревшие элементы, определённые PEP 829:
Предупреждения выводятся для строк
import, найденных вname.pthфайлах.Файлы
name.pthбольше не декодируются в кодировке локали по умолчанию. Они ДОЛЖНЫ быть закодированы вutf-8-sig.
(Вклад: Barry Warsaw в gh-148641.)
ast:Создание экземпляров абстрактных узлов AST (таких как
ast.ASTилиast.expr) устарело и будет вызывать ошибку в Python 3.20.
Ожидается удаление в Python 3.21¶Pending removal in Python 3.21
-
Мягко устаревшие с Python 3.3
abc.abstractclassmethod,abc.abstractstaticmethodиabc.abstractpropertyтеперь вызываютDeprecationWarning. Эти классы будут удалены в Python 3.21, вместо них используйтеabc.abstractmethod()сclassmethod(),staticmethod()иpropertyсоответственно.
ast:Классы
slice,Index,ExtSlice,Suite,Param,AugLoadиAugStoreбудут удалены в Python 3.21. Эти типы не создаются синтаксическим анализатором и не принимаются генератором кода.Свойство
dimsобъектаast.Tupleбудет удалено в Python 3.21. Используйте свойствоast.Tuple.eltsвместо него.
-
Мягко устаревшие с Python 3.15, коды типов
'F'и'D'теперь устарели. Эти коды будут удалены в Python 3.21. Используйте вместо них двухбуквенные формы'Zf'и'Zd'.
-
tempfile._TemporaryFileWrapperбудет удалён в Python 3.21. Используйте публичныйtempfile.TemporaryFileWrapperвместо него.
Будет удалено в будущих версиях¶Pending removal in future versions
Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.
-
Вложение групп аргументов и вложение взаимоисключающих групп устарело.
Передача недокументированного именованного аргумента prefix_chars в
add_argument_group()теперь устарела.Конвертер типов
argparse.FileTypeустарел.
-
Генераторы: сигнатура
throw(type, exc, tb)иathrow(type, exc, tb)устарела: используйтеthrow(exc)иathrow(exc)вместо неё, сигнатуру с одним аргументом.В настоящее время Python принимает числовые литералы, за которыми сразу следуют ключевые слова, например
0in x,1or x,0if 1else 2. Это допускает запутанные и неоднозначные выражения вроде[0x1for x in y](которое может быть интерпретировано как[0x1 for x in y]или[0x1f or x in y]). Выдаётся предупреждение синтаксиса, если за числовым литералом сразу следует одно из ключевых словand,else,for,if,in,isиor. В будущем выпуске это будет изменено на синтаксическую ошибку. (gh-87999)Поддержка методов
__index__()и__int__(), возвращающих не-int тип: эти методы должны будут возвращать экземпляр строгого подклассаint.Поддержка метода
__float__(), возвращающего строгий подклассfloat: эти методы должны будут возвращать экземплярfloat.Поддержка метода
__complex__(), возвращающего строгий подклассcomplex: эти методы должны будут возвращать экземплярcomplex.Передача комплексного числа в качестве аргумента real или imag в конструкторе
complex()теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в gh-109218.)
calendar: константыcalendar.Januaryиcalendar.Februaryустарели и заменены наcalendar.JANUARYиcalendar.FEBRUARY. (Автор: Prince Roshan в gh-103636.)codecs: используйтеopen()вместоcodecs.open(). (gh-133038)codeobject.co_lnotab: используйте методcodeobject.co_lines()вместо этого.-
utcnow(): используйтеdatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): используйтеdatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: значение множественного числа должно быть целым числом.-
cache_from_source(): параметр debug_override устарел: используйте параметр optimization вместо него.
-
EntryPoints: интерфейс кортежа.Неявное
Noneдля возвращаемых значений.
logging: методwarn()устарел начиная с Python 3.3, используйтеwarning()вместо него.mailbox: использование StringIO в режиме ввода и текстовом режиме устарело, используйте BytesIO и двоичный режим.os: вызовos.register_at_fork()в многопоточном процессе.os.path:os.path.commonprefix()устарела, используйтеos.path.commonpath()для префиксов путей. Функцияos.path.commonprefix()объявлена устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то что находится в модуле для работы с путями, что означает, что легко случайно внести уязвимости обхода путей в программы на Python, используя эту функцию.pydoc.ErrorDuringImport: кортежное значение для параметра exc_info устарело, используйте экземпляр исключения.re: теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в gh-91760.)shutil: параметр onerror методаrmtree()устарел в Python 3.12; используйте параметр onexc вместо него.ssl: опции и протоколы:ssl.SSLContextбез аргумента протокол устарело.ssl.SSLContext:set_npn_protocols()иselected_npn_protocol()устарели: используйте ALPN вместо них.ssl.OP_NO_SSL*: опцииssl.OP_NO_TLS*: опцииssl.PROTOCOL_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
threading: методыthreading.Condition.notifyAll(): используйтеnotify_all().threading.Event.isSet(): используйтеis_set().threading.Thread.isDaemon(),threading.Thread.setDaemon(): используйте атрибутthreading.Thread.daemon.threading.Thread.getName(),threading.Thread.setName(): используйте атрибутthreading.Thread.name.threading.currentThread(): используйтеthreading.current_thread().threading.activeCount(): используйтеthreading.active_count().
Внутренний класс
typing._UnionGenericAliasбольше не используется для реализацииtyping.Union. Для сохранения совместимости с пользователями, использующими этот закрытый класс, будет предоставлена прослойка совместимости как минимум до Python 3.17. (Автор: Jelle Zijlstra, gh-105499.)unittest.IsolatedAsyncioTestCase: возврат значения, не являющегосяNone, из тестового примера устарел.urllib.parseустаревшие функции: используйтеurlparse()вместо них.splitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()не должна выполнять частичную запись.xml.etree.ElementTree: проверка истинностного значенияElementустарела. В будущем выпуске она всегда будет возвращатьTrue. Вместо этого используйте явные проверкиlen(elem)илиelem is not None.sys._clear_type_cache()устарело: используйтеsys._clear_internal_caches()вместо него.
Перенос на Python 3.16¶Porting to Python 3.16
В этом разделе перечислены ранее описанные изменения и другие исправления ошибок, которые могут потребовать изменений в вашем коде.
Изменения в сборке¶Build changes
Удалить встроенную копию десятичной библиотеки libmpdec из дерева исходного кода CPython для упрощения сопровождения и обновлений. Модуль
decimalтеперь будет безусловно использовать системную десятичную библиотеку libmpdec. Также удаляется теперь неиспользуемый флаг--with-system-libmpdecconfigure. Это изменение не влияет на бинарные релизы Python, которые в последних нескольких выпусках собирались с отдельной копией libmpdec.(Автор: Sergey B Kirpichev в gh-115119.)
Добавить флаг конфигурации
--with-build-details-suffix, чтобы позволить дистрибутивам Linux, которые устанавливают несколько версий Python вместе в одном дереве, избежать конфликтовbuild-details.json.(Автор: Stefano Rivera в gh-131372.)
Изменения C API¶C API changes
Новые возможности¶New features
TODO
Перенос на Python 3.16¶Porting to Python 3.16
TODO
Устаревшие C API¶Deprecated C APIs
PyGen_New(),PyGen_NewWithQualName(),PyCoro_New(), иPyAsyncGen_New()устарели. Их планируется удалить в версии 3.18.
Запланировано удаление в Python 3.18¶Pending removal in Python 3.18
Следующие закрытые функции устарели и планируются к удалению в Python 3.18:
_PyBytes_Join(): используйтеPyBytes_Join()._PyDict_GetItemStringWithError(): используйтеPyDict_GetItemStringRef()._PyDict_Pop(): используйтеPyDict_Pop()._PyLong_Sign(): используйтеPyLong_GetSign()._PyLong_FromDigits()и_PyLong_New(): используйтеPyLongWriter_Create()._PyThreadState_UncheckedGet(): используйтеPyThreadState_GetUnchecked()._PyUnicode_AsString(): используйтеPyUnicode_AsUTF8()._PyUnicodeWriter_Init(): заменить_PyUnicodeWriter_Init(&writer)наwriter = PyUnicodeWriter_Create(0)._PyUnicodeWriter_Finish(): заменить_PyUnicodeWriter_Finish(&writer)наPyUnicodeWriter_Finish(writer)._PyUnicodeWriter_Dealloc(): заменить_PyUnicodeWriter_Dealloc(&writer)наPyUnicodeWriter_Discard(writer)._PyUnicodeWriter_WriteChar(): заменить_PyUnicodeWriter_WriteChar(&writer, ch)наPyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): заменить_PyUnicodeWriter_WriteStr(&writer, str)наPyUnicodeWriter_WriteStr(writer, str)._PyUnicodeWriter_WriteSubstring(): заменить_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)наPyUnicodeWriter_WriteSubstring(writer, str, start, end)._PyUnicodeWriter_WriteASCIIString(): заменить_PyUnicodeWriter_WriteASCIIString(&writer, str)наPyUnicodeWriter_WriteASCII(writer, str)._PyUnicodeWriter_WriteLatin1String(): заменить_PyUnicodeWriter_WriteLatin1String(&writer, str)наPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_Prepare(): (нет замены)._PyUnicodeWriter_PrepareKind(): (нет замены)._Py_HashPointer(): используйтеPy_HashPointer()._Py_fopen_obj(): используйтеPy_fopen().PyGen_New(): (нет замены).PyGen_NewWithQualName(): (нет замены).PyCoro_New(): (нет замены).PyAsyncGen_New(): (нет замены).
Проект pythoncapi-compat можно использовать для получения этих новых открытых функций в Python 3.13 и старше. (Предложено Виктором Стиннером в gh-128863.)
Запланировано к удалению в Python 3.19¶Pending removal in Python 3.19
PEP 456 поддержка встраивающих систем для определения схемы хеширования строк.
Ожидается удаление в Python 3.20¶Pending removal in Python 3.20
_PyObject_CallMethodId(),_PyObject_GetAttrId()и_PyUnicode_FromId()устарели с версии 3.15 и будут удалены в 3.20. Вместо этого используйтеPyUnicode_InternFromString()и кешируйте результат в состоянии модуля, затем вызывайтеPyObject_CallMethod()илиPyObject_GetAttr(). (Предложено Виктором Стиннером в gh-141049.)Поле
cvalвPyComplexObject(gh-128813). ИспользуйтеPyComplex_AsCComplex()иPyComplex_FromCComplex()для преобразования комплексного числа Python в/из представления CPy_complex.Макросы
Py_MATH_PIlиPy_MATH_El.
Будет удалено в будущих версиях¶Pending removal in future versions
Следующие API устарели и будут удалены, хотя на данный момент дата их удаления не назначена.
Py_TPFLAGS_HAVE_FINALIZE: Не требуется начиная с Python 3.8.PyErr_Fetch(): Вместо этого используйтеPyErr_GetRaisedException().PyErr_NormalizeException(): Вместо этого используйтеPyErr_GetRaisedException().PyErr_Restore(): Вместо этого используйтеPyErr_SetRaisedException().PyModule_GetFilename(): Вместо этого используйтеPyModule_GetFilenameObject().PyOS_AfterFork(): Вместо этого используйтеPyOS_AfterFork_Child().PySlice_GetIndicesEx(): Вместо этого используйтеPySlice_Unpack()иPySlice_AdjustIndices().PyUnicode_READY(): Не требуется начиная с Python 3.12PyErr_Display(): Вместо этого используйтеPyErr_DisplayException()._PyErr_ChainExceptions(): Вместо этого используйте_PyErr_ChainExceptions1().Элемент
PyBytesObject.ob_shash: вместо этого вызывайтеPyObject_Hash().API локального хранилища потока (TLS):
PyThread_create_key(): Вместо этого используйтеPyThread_tss_alloc().PyThread_delete_key(): Вместо этого используйтеPyThread_tss_free().PyThread_set_key_value(): Вместо этого используйтеPyThread_tss_set().PyThread_get_key_value(): Вместо этого используйтеPyThread_tss_get().PyThread_delete_key_value(): Вместо этого используйтеPyThread_tss_delete().PyThread_ReInitTLS(): Не требуется с Python 3.7.