Что нового в Python 3.4¶
- Автор:
Р. Дэвид Мюррей <rdmurray@bitdance.com> (Редактор)
В этой статье описываются новые возможности Python 3.4 по сравнению с версией 3.3. Версия Python 3.4 была выпущена 16 марта 2014 года. Более подробную информацию смотрите в changelog.
См.также
PEP 429 – Расписание выхода Python 3.4
Краткое описание - Основные моменты выпуска¶
Новые возможности синтаксиса:
В Python 3.4 не было добавлено никаких новых синтаксических функций.
Другие новые функции:
Newly created file descriptors are non-inheritable (PEP 446).
параметр командной строки для isolated mode (bpo-16499).
improvements in the handling of codecs, которые не являются текстовыми кодировками (несколько проблем).
A ModuleSpec Type для системы импорта (PEP 451). (Влияет на авторов-импортеров.)
Был создан формат
marshal
more compact and efficient (bpo-16475).
Новые библиотечные модули:
asyncio
: New provisional API for asynchronous IO (PEP 3156).selectors
: High-level and efficient I/O multiplexing, построен на основе примитивов модуляselect
(часть модуля PEP 3156).statistics
: Базовый numerically stable statistics library (PEP 450).
Значительно улучшенные библиотечные модули:
Новый
pickle
protocol 4 (PEP 3154).multiprocessing
теперь есть an option to avoid using os.fork on Unix (bpo-8713).email
содержит новый подмодульcontentmanager
и новый подклассMessage
(EmailMessage
), который simplify MIME handling (bpo-18891).Модули
inspect
иpydoc
теперь способны корректно анализировать гораздо более широкий спектр вызываемых объектов, что улучшает производительность системы Pythonhelp()
.API модуля
ipaddress
объявлен стабильным
Улучшения в области безопасности:
Make newly created file descriptors non-inheritable (PEP 446) чтобы избежать утечки файловых дескрипторов дочерним процессам.
Новая опция командной строки для isolated mode, (bpo-16499).
multiprocessing
теперь имеет значение an option to avoid using os.fork on Unix. spawn и forkserver более безопасны, поскольку позволяют избежать обмена данными с дочерними процессами.multiprocessing
дочерние процессы в Windows больше не наследуют все наследуемые дескрипторы родительских процессов, а только необходимые.Новая функция
hashlib.pbkdf2_hmac()
предоставляет функцию PKCS#5 password-based key derivation function 2.Retrieving certificates from the Windows system cert store support для
ssl
.Класс
ssl.SSLContext
имеет значение lot of improvements.Все модули стандартной библиотеки, поддерживающие SSL, теперь поддерживают проверку сертификата сервера, включая сопоставление имен хостов (
ssl.match_hostname()
) и CRL (списки отзыва сертификатов, см.ssl.SSLContext.load_verify_locations()
).
Улучшения в реализации CPython:
Используя PEP 442, в большинстве случаев module globals are no longer set to None during finalization (bpo-18214).
Пожалуйста, ознакомьтесь с полным списком изменений, с которыми сталкиваются пользователи, включая множество других небольших улучшений, оптимизацию CPython, устаревание и возможные проблемы с переносом.
Новые возможности¶
PEP 453: Явная загрузка PIP в установках Python¶
Начальная загрузка pip по умолчанию¶
Новый модуль ensurepip
(определенный в PEP 453) предоставляет стандартный кроссплатформенный механизм для начальной загрузки установщика pip в установки Python и виртуальные среды. Версия pip
, входящая в состав Python 3.4.0, - это pip
1.5.4, и в будущих обновлениях для поддержки 3.4.x версия, входящая в комплект поставки, будет обновлена до последней версии pip
, доступной на момент создания версии-кандидата.
По умолчанию команды pipX
и pipX.Y
будут установлены на всех платформах (где X.Y означает версию установки Python) вместе с пакетом pip
Python и его зависимостями. В Windows и в виртуальных средах на всех платформах также будет установлена неверсионная команда pip
. На других платформах общесистемная неверсионная команда pip
обычно относится к отдельно установленной версии Python 2.
Утилита командной строки pyvenv
и модуль venv
используют модуль ensurepip
, чтобы сделать pip
легко доступными в виртуальных средах. При использовании утилиты командной строки по умолчанию устанавливается pip
, в то время как при использовании модуля venv
интерфейс прикладного программирования установка pip
должна быть запрошена явно.
Для CPython source builds on POSIX systems по умолчанию используются команды make install
и make altinstall
для начальной загрузки pip
. Это поведение можно контролировать с помощью параметров configure и переопределять с помощью параметров Makefile.
В Windows и Mac OS X установщики CPython теперь по умолчанию устанавливают pip
вместе с самим CPython (пользователи могут отказаться от его установки в процессе установки). Пользователям Windows необходимо будет выбрать автоматические изменения PATH
, чтобы по умолчанию из командной строки было доступно pip
, в противном случае к нему все еще можно получить доступ через программу запуска Python для Windows как к py -m pip
.
Поскольку discussed in the PEP, разработчики пакетов для платформы могут отказаться от установки этих команд по умолчанию, при условии, что при вызове они предоставляют четкие и простые инструкции о том, как установить их на эту платформу (обычно с помощью системного менеджера пакетов).
Примечание
Чтобы избежать конфликтов между параллельными установками Python 2 и Python 3, по умолчанию загружаются только версионные команды pip3
и pip3.4
при прямом вызове ensurepip
- параметр --default-pip
необходим также для запросите неверсионную команду pip
. pyvenv
и установщик Windows гарантируют, что в этих средах доступна команда pip
, не отвечающая требованиям, и pip
всегда можно вызвать с помощью -m
переключайтесь, а не напрямую, чтобы избежать неоднозначности в системах с несколькими установками Python.
Изменения в документации¶
В рамках этого изменения разделы документации Установка модулей Python и Распространение модулей Python были полностью переработаны в виде краткого руководства по началу работы и часто задаваемых вопросов. Большая часть документации по упаковке теперь перенесена в Python Packaging Authority, поддерживаемый Python Packaging User Guide, а также в документацию по отдельным проектам.
Однако, поскольку эта миграция в настоящее время все еще не завершена, устаревшие версии этих руководств остаются доступными как Установка модулей Python (устаревшая версия) и Распространение модулей Python (устаревшая версия).
См.также
- PEP 453 – Явная загрузка pip в установках Python
PEP написан Дональдом Стаффтом и Ником Когланом, реализован Дональдом Стаффтом, Ником Когланом, Мартином фон Левисом и Недом Дейли.
PEP 446: Вновь Созданные Файловые Дескрипторы Не Наследуются¶
PEP 446 создает вновь созданные файловые дескрипторы non-inheritable. В общем, именно такое поведение необходимо приложению: при запуске нового процесса наличие открытых в данный момент файлов, также открытых в новом процессе, может привести к разного рода трудноуловимым ошибкам и, возможно, к проблемам с безопасностью.
Однако в некоторых случаях требуется наследование. Для поддержки таких случаев доступны следующие новые функции и методы:
См.также
- PEP 446 – Сделать вновь созданные файловые дескрипторы не наследуемыми
PEP, написанный и реализованный Виктором Стиннером.
Улучшения в работе с кодеками¶
С момента своего появления модуль codecs
всегда предназначался для работы в качестве системы динамического кодирования и декодирования, не зависящей от типа данных. Однако его тесная связь с текстовой моделью Python, особенно с удобными методами с ограниченным типом во встроенных типах str
, bytes
и bytearray
, исторически скрывала этот факт.
В качестве ключевого шага к прояснению ситуации, удобные функции codecs.encode()
и codecs.decode()
теперь должным образом задокументированы в Python 2.7, 3.3 и 3.4. Эти функции существовали в модуле codecs
(и были описаны в regression test suite) начиная с версии Python 2.4, но ранее их можно было обнаружить только с помощью самоанализа во время выполнения.
В отличие от удобных методов на str
, bytes
и bytearray
, удобные функции codecs
поддерживают произвольные кодеки как в Python 2, так и в Python 3, а не ограничиваются текстовыми кодировками Unicode (в Python 3) или basestring
<-> basestring
преобразования (в Python 2).
В Python 3.4 интерпретатор способен идентифицировать известные нетекстовые кодировки, предоставляемые в стандартной библиотеке, и направлять пользователей к этим удобным функциям общего назначения, когда это необходимо:
>>> b"abcdef".decode("hex")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs
>>> "hello".encode("rot13")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LookupError: 'rot13' is not a text encoding; use codecs.encode() to handle arbitrary codecs
>>> open("foo.txt", encoding="hex")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LookupError: 'hex' is not a text encoding; use codecs.open() to handle arbitrary codecs
В соответствующем изменении, когда это возможно без нарушения обратной совместимости, исключения, возникающие во время операций кодирования и декодирования, объединяются в цепочку исключений того же типа, в которой упоминается название кодека, ответственного за возникновение ошибки:
>>> import codecs
>>> codecs.decode(b"abcdefgh", "hex")
Traceback (most recent call last):
File "/usr/lib/python3.4/encodings/hex_codec.py", line 20, in hex_decode
return (binascii.a2b_hex(input), len(input))
binascii.Error: Non-hexadecimal digit found
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
binascii.Error: decoding with 'hex' codec failed (Error: Non-hexadecimal digit found)
>>> codecs.encode("hello", "bz2")
Traceback (most recent call last):
File "/usr/lib/python3.4/encodings/bz2_codec.py", line 17, in bz2_encode
return (bz2.compress(input), len(input))
File "/usr/lib/python3.4/bz2.py", line 498, in compress
return comp.compress(data) + comp.flush()
TypeError: 'str' does not support the buffer interface
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: encoding with 'bz2' codec failed (TypeError: 'str' does not support the buffer interface)
Наконец, как показывают приведенные выше примеры, эти улучшения позволили восстановить удобные псевдонимы для кодеков, отличных от Unicode, которые сами были восстановлены в Python 3.2. Это означает, что кодирование двоичных данных в шестнадцатеричное представление и из него (например) теперь может быть записано как:
>>> from codecs import encode, decode
>>> encode(b"hello", "hex")
b'68656c6c6f'
>>> decode(b"68656c6c6f", "hex")
b'hello'
Двоичные и текстовые преобразования, предоставляемые стандартной библиотекой, подробно описаны в Двоичные преобразования и Преобразование текста.
(Автор: Ник Коглан в статье bpo-7475, bpo-17827, bpo-17828 и bpo-19619.)
PEP 451: Тип спецификации модуля для системы импорта¶
PEP 451 обеспечивает инкапсуляцию информации о модуле, которую механизм импорта будет использовать для его загрузки (то есть спецификацию модуля). Это помогает упростить как реализацию импорта, так и несколько связанных с импортом API. Это изменение также является отправной точкой для several future import-related improvements.
Общедоступные изменения, внесенные в PEP, полностью совместимы друг с другом. Кроме того, они должны быть прозрачны для всех, кроме авторов-импортеров. Методы поиска ключей и загрузки устарели, но они будут продолжать работать. Новые импортеры должны использовать новые методы, описанные в PEP. Существующие импортеры должны быть обновлены для внедрения новых методов. Список методов, которые следует заменить, и способы их замены приведены в разделе Осуждаемый.
Другие языковые изменения¶
Вот некоторые небольшие изменения, внесенные в основной язык Python:
База данных Unicode обновлена до UCD версии 6.3.
min()
иmax()
теперь принимают аргумент default, содержащий только ключевое слово, который можно использовать для указания возвращаемого значения, если оцениваемая итерируемая переменная не содержит элементов. (Автор: Джулиан Берман в статье bpo-18111.)Объекты модуля теперь имеют значение weakly referenceable.
Атрибуты модуля
__file__
(и связанные с ними значения) теперь всегда должны содержать абсолютные пути по умолчанию, за единственным исключением__main__.__file__
, когда скрипт был выполнен непосредственно с использованием относительного пути. (Автор Бретт Кэннон в bpo-18416.)Все кодеки UTF-* (кроме UTF-7) теперь отклоняют суррогаты как при кодировании, так и при декодировании, если только не используется обработчик ошибок
surrogatepass
, за исключением декодера UTF-16 (который принимает допустимые суррогатные пары) и кодера UTF-16 (который выдает их при кодировании символов, отличных от BMP). (Авторы: Виктор Стиннер, Кан Хао (Кенни) Лу и Сергей Сторчака в bpo-12892.)Новый немецкий электронный справочник codec
cp273
. (Материалы предоставлены Майклом Биренфельдом и Эндрю Кюхлингом в bpo-1097797.)Новый украинский язык codec
cp1125
. (Автор Сергей Сторчака в bpo-19668.)bytes
.join() иbytearray
.join() теперь принимают в качестве аргументов произвольные буферные объекты. (Добавлено Антуаном Питру в bpo-15958.)Конструктор
int
теперь принимает любой объект, который имеет метод__index__
в качестве своего базового аргумента. (Добавлено Марком Дикинсоном в bpo-16772.)В объектах Frame теперь есть метод
clear()
, который удаляет из фрейма все ссылки на локальные переменные. (Автор: Антуан Питру в статье bpo-17934).memoryview
теперь зарегистрирован какSequence
и поддерживает встроенныйreversed()
. (Авторы - Ник Коглан и Клаудиу Попа в bpo-18690 и bpo-19078.)Сигнатуры, о которых сообщает
help()
, были изменены и улучшены в нескольких случаях в результате внедрения Argument Clinic и других изменений в модуляхinspect
иpydoc
.__length_hint__()
теперь является частью спецификации формального языка (см. PEP 424). (Добавлено Армином Роначером в bpo-16148.)
Новые модули¶
асинхронный¶
Новый модуль asyncio
(определенный в PEP 3156) предоставляет стандартную подключаемую модель цикла обработки событий для Python, обеспечивая надежную поддержку асинхронного ввода-вывода в стандартной библиотеке и упрощая взаимодействие других реализаций цикла обработки событий со стандартной библиотекой и друг с другом.
Для Python 3.4 этот модуль считается provisional API.
См.также
- PEP 3156 – Поддержка асинхронного ввода-вывода перезагружена: модуль «asyncio»
Автором PEP и его внедрением руководил Гвидо ван Россум.
обеспечение безопасности¶
Новый модуль ensurepip
является основной инфраструктурой для реализации PEP 453. При обычном ходе событий конечным пользователям не нужно будет взаимодействовать с этим модулем, но его можно использовать для ручной загрузки pip
, если автоматическая загрузка в установочную или виртуальную среду была отклонена.
ensurepip
включает в себя комплектную копию pip
, обновленную по состоянию на первый релиз-кандидат версии CPython, с которой она поставляется (это относится как к выпускам технического обслуживания, так и к выпускам функциональных возможностей). ensurepip
не имеет доступа к Интернету. Если у установки есть доступ в Интернет, то после запуска ensurepip
можно использовать входящий в комплект pip
для обновления pip
до более поздней версии, чем входящая в комплект. (Обратите внимание, что такая обновленная версия pip
считается отдельно установленным пакетом и не будет удалена при деинсталляции Python.)
Модуль называется ensurepip, потому что, если он вызывается, когда pip
уже установлен, он ничего не делает. В нем также есть опция --upgrade
, которая заставит его установить входящую в комплект копию pip
, если существующая установленная версия pip
более старая, чем входящая в комплект копия.
перечисление¶
Новый модуль enum
(определенный в PEP 435) предоставляет стандартную реализацию типов перечислений, позволяя другим модулям (таким как socket
) предоставлять более информативные сообщения об ошибках и улучшать поддержку отладки, заменяя непрозрачные целочисленные константы обратными совместимые значения перечисления.
См.также
- PEP 435 – Добавление типа перечисления в стандартную библиотеку Python
PEP написан Барри Уорсо, Эли Бендерски и Итаном Фурманом, реализован Итаном Фурманом.
файл пути¶
Новый модуль pathlib
предлагает классы, представляющие пути к файловой системе, с семантикой, подходящей для различных операционных систем. Классы путей делятся на чистые пути, которые обеспечивают чисто вычислительные операции без ввода-вывода, и конкретные пути, которые наследуются от чистых путей, но также обеспечивают операции ввода-вывода.
Для Python 3.4 этот модуль считается provisional API.
См.также
- PEP 428 – Модуль pathlib – пути к объектно-ориентированной файловой системе
PEP, написанный и реализованный Антуаном Питру.
селекторы¶
Новый модуль selectors
(созданный в рамках реализации PEP 3156) обеспечивает высокоуровневое и эффективное мультиплексирование ввода-вывода, основанное на примитивах модуля select
.
статистика¶
Новый модуль statistics
(определенный в PEP 450) предлагает некоторые основные статистические функции непосредственно в стандартной библиотеке. Этот модуль поддерживает вычисление среднего, медианы, модуса, дисперсии и стандартного отклонения ряда данных.
См.также
- PEP 450 – Добавление Модуля Статистики В Стандартную Библиотеку
PEP, написанный и реализованный Стивеном Д’Апрано
трассировочный блок¶
Новый модуль tracemalloc
(определенный в PEP 454) представляет собой инструмент отладки для отслеживания блоков памяти, выделяемых Python. Он предоставляет следующую информацию:
Отслеживание того, где был размещен объект
Статистика по выделенным блокам памяти для каждого имени файла и номера строки: общий размер, количество и средний размер выделенных блоков памяти
Вычислите различия между двумя моментальными снимками, чтобы обнаружить утечки памяти
См.также
- PEP 454 – Добавьте новый модуль tracemalloc для отслеживания распределения памяти в Python
PEP, написанный и реализованный Виктором Стиннером
Улучшенные модули¶
азбука¶
abc.get_cache_token`New function << < 0>>> can be used to know when to invalidate caches that are affected by changes in the object graph. (Contributed by Lukasz Langa in :issue:`16832()
.)
Новый класс ABC
имеет ABCMeta
в качестве своего метакласса. Использование ABC
в качестве базового класса имеет, по сути, тот же эффект, что и указание metaclass=abc.ABCMeta
, но его проще вводить и легче читать. (Автор: Бруно Дюпюи в bpo-16049.)
мфца¶
Метод getparams()
теперь возвращает namedtuple, а не простой кортеж. (Добавлено Клаудиу Попой в bpo-17818.)
aifc.open()
теперь поддерживается протокол управления контекстом: при использовании в блоке with
метод close()
возвращаемого объекта будет вызван автоматически в конце блока. ((Автор - Сергей Сторчача в bpo-16486.)
Методы writeframesraw()
и writeframes()
теперь принимают любые bytes-like object. (Добавлено Сергеем Сторчакой в bpo-8311.)
аргументированный анализ¶
Класс FileType
теперь принимает аргументы encoding и errors, которые передаются в open()
. (Добавлено Лукасом Майстре в bpo-11175.)
аудиозапись¶
audioop
теперь поддерживается поддержка 24-разрядных сэмплов. (Добавлено Сергеем Сторчакой в bpo-12866.)
Новая функция byteswap()
преобразует выборки с большими порядковыми номерами в выборки с малыми порядковыми номерами и наоборот. (Добавлено Сергеем Сторчакой в bpo-19641.)
Все функции audioop
теперь принимают любые bytes-like object. Строки не принимаются: раньше они не работали, а теперь сразу выдают ошибку. (Добавлено Сергеем Сторчакой в bpo-16685.)
базовый уровень 64¶
Функции кодирования и декодирования в base64
теперь принимают любой bytes-like object в тех случаях, когда ранее для этого требовался экземпляр bytes
или bytearray
. (Автор: Ник Коглан в статье bpo-17839.)
Новые функции a85encode()
, a85decode()
, b85encode()
, и b85decode()
предоставляют возможность кодировать и декодировать двоичные данные из форматов Ascii85
и git/mercurial Base85
соответственно. Функции a85
имеют опции, которые можно использовать для обеспечения их совместимости с вариантами кодировки Ascii85
, включая вариант Adobe. (Материалы предоставлены Мартином Моррисоном, проект Mercurial, Сергеем Сторчакой и Антуаном Питру в bpo-17618.)
коллекции¶
Метод ChainMap.new_child()
теперь принимает аргумент m, указывающий дочернюю карту, которую нужно добавить в цепочку. Это позволяет использовать существующую карту и/или пользовательский тип отображения для дочерней карты. (Автор: Винай Саджип в статье bpo-16613.)
цветовая гамма¶
Количество цифр в коэффициентах для преобразования RGB в YIQ было увеличено, чтобы они соответствовали версиям FCC NTSC. Изменение результатов должно составлять менее 1% и может лучше соответствовать результатам, полученным в других источниках. (Материалы предоставлены Брайаном Ландерсом и Сергеем Сторчакой в bpo-14323.)
контекстная библиотека¶
Новый контекстный менеджер contextlib.suppress
помогает прояснить назначение кода, который намеренно подавляет исключения из одного оператора. (Авторы: Рэймонд Хеттингер в bpo-15806 и Зеро Пирей в bpo-19266).
Новый контекстный менеджер contextlib.redirect_stdout()
упрощает служебным скриптам работу с негибкими API, которые записывают свои выходные данные в sys.stdout
и не предоставляют никаких опций для их перенаправления. Используя диспетчер контекста, выходные данные sys.stdout
могут быть перенаправлены в любой другой поток или, в сочетании с io.StringIO
, в строку. Последнее может быть особенно полезно, например, для получения выходных данных из функции, которая была написана для реализации интерфейса командной строки. Рекомендуется только для служебных скриптов, поскольку это влияет на глобальное состояние sys.stdout
. (Материал подготовлен Раймондом Хеттингером в bpo-15805.)
Документация contextlib
также была обновлена, чтобы включить discussion описание различий между одноразовыми, повторно используемыми и реентерабельными контекстными менеджерами.
дбм¶
dbm.open()
объекты теперь поддерживают протокол управления контекстом. При использовании в инструкции with
метод close
объекта базы данных будет вызван автоматически в конце блока. (Материалы предоставлены Клаудиу Попой и Ником Когланом в bpo-19282.)
дис¶
Функции show_code()
, dis()
, distb()
, и disassemble()
теперь принимают аргумент file, содержащий только ключевое слово, который определяет, куда они записывают свои выходные данные.
Модуль dis
теперь построен на основе класса Instruction
, который обеспечивает объектно-ориентированный доступ к деталям каждой отдельной операции с байт-кодом.
Новый метод, get_instructions()
, предоставляет итератор, который генерирует поток команд для заданного фрагмента кода на Python. Таким образом, теперь можно написать программу, которая проверяет объект байт-кода и манипулирует им способами, отличными от тех, которые предоставляются самим модулем dis
. Например:
>>> import dis
>>> for instr in dis.get_instructions(lambda x: x + 1):
... print(instr.opname)
LOAD_FAST
LOAD_CONST
BINARY_ADD
RETURN_VALUE
Различные средства отображения в модуле dis
были переписаны для использования этих новых компонентов.
Кроме того, новый удобный для приложений класс Bytecode
предоставляет объектно-ориентированный API для проверки байт-кода как в удобочитаемой форме, так и для выполнения итераций по инструкциям. Конструктор Bytecode
принимает те же аргументы, что и get_instruction()
(плюс необязательный параметр current_offset), и результирующий объект может быть обработан итерацией для создания Instruction
объектов. Но у него также есть метод dis
, эквивалентный вызову аргумента конструктора dis
, но возвращаемый в виде многострочной строки:
>>> bytecode = dis.Bytecode(lambda x: x + 1, current_offset=3)
>>> for instr in bytecode:
... print('{} ({})'.format(instr.opname, instr.opcode))
LOAD_FAST (124)
LOAD_CONST (100)
BINARY_ADD (23)
RETURN_VALUE (83)
>>> bytecode.dis().splitlines()
[' 1 0 LOAD_FAST 0 (x)',
' --> 3 LOAD_CONST 1 (1)',
' 6 BINARY_ADD',
' 7 RETURN_VALUE']
Bytecode
также имеет метод класса from_traceback()
, который предоставляет возможность манипулировать обратной трассировкой (то есть print(Bytecode.from_traceback(tb).dis())
эквивалентно distb(tb)
).
(Авторы: Ник Коглан, Райан Келли и Томас Клюйвер в bpo-11816 и Клаудиу Попа в bpo-17916.)
Новая функция stack_effect()
вычисляет влияние на стек Python заданного кода операции и аргумента, информацию, которая в противном случае недоступна. (Добавлено Ларри Хастингсом в bpo-19722.)
самый проверенный¶
Новая функция option flag, FAIL_FAST
, останавливает выполнение теста, как только обнаруживается первая ошибка. (Авторы: Р. Дэвид Мюррей и Дэниел Урбан в bpo-16522).
Интерфейс командной строки doctest
теперь использует argparse
и имеет две новые опции: -o
и -f
. -o
позволяет использовать doctest options указывается в командной строке, а -f
является сокращением от -o FAIL_FAST
(для параллельного использования аналогичной опции, поддерживаемой unittest
CLI). (Подготовлено Р. Дэвидом Мюрреем в bpo-11390.)
doctest
теперь вы найдете тесты в модуле расширения __doc__
строк. (Добавлено Закари Уэром в bpo-3158.)
электронная почта¶
as_string()
теперь принимает аргумент policy для переопределения политики сообщения по умолчанию при создании его строкового представления. Это означает, что as_string
теперь можно использовать в большем количестве случаев, вместо того, чтобы создавать и использовать generator
для передачи параметров форматирования в его метод flatten
. (Подготовлено Р. Дэвидом Мюрреем в bpo-18600.)
Добавлен новый метод as_bytes()
для создания байтового представления сообщения аналогично тому, как as_string
создает строковое представление. Он не принимает аргумент maxheaderlen, но принимает аргументы unixfrom и policy. Метод Message
__bytes__()
вызывает его, что означает, что bytes(mymsg)
теперь выдаст интуитивно понятный результат: объект bytes, содержащий полностью отформатированное сообщение. (Подготовлено Р. Дэвидом Мюрреем в bpo-18600.)
Сообщение Message.set_param()
теперь принимает аргумент ключевого слова replace. Если он указан, соответствующий заголовок будет обновлен без изменения его местоположения в списке заголовков. Для обеспечения обратной совместимости по умолчанию используется значение False
. (Автор: Р. Дэвид Мюррей в bpo-18891.)
Добавлена пара новых подклассов Message
(EmailMessage
и MIMEPart
), а также новый подмодуль contentmanager
и новый атрибут policy
content_manager
. Вся документация в настоящее время находится в новом модуле, который добавляется как часть нового модуля электронной почты provisional API. Эти классы предоставляют ряд новых методов, которые значительно упрощают извлечение содержимого из сообщений электронной почты и вставку содержимого в сообщения электронной почты. Более подробную информацию смотрите в документации contentmanager
и в документации email: Примеры. Эти дополнения к API завершают основную часть работы, которая была запланирована в рамках проекта email6. Планируется, что существующий на данный момент предварительный API станет окончательным в версии Python 3.5 (возможно, с несколькими незначительными дополнениями в области обработки ошибок). (Автор: Р. Дэвид Мюррей в bpo-18891).
filecmp-файл¶
Новая функция clear_cache()
предоставляет возможность очистить кэш сравнения filecmp
, который использует информацию os.stat()
, чтобы определить, изменился ли файл с момента последнего сравнения. Это может быть использовано, например, в том случае, если файл мог быть изменен и перепроверен за меньшее время, чем указано в поле «Время изменения файла» конкретной файловой системы. (Добавлено Марком Левиттом в bpo-18149).
Новый атрибут модуля DEFAULT_IGNORES
содержит список каталогов, которые используются в качестве значения по умолчанию для параметра игнорировать функции dircmp()
. (Добавлено Эли Бендерским в bpo-15442.)
функциональные средства¶
Новый дескриптор partialmethod()
обеспечивает частичное применение аргументов к дескрипторам, точно так же, как partial()
обеспечивает обычный callable. Новый дескриптор также упрощает получение произвольных вызываемых объектов (включая экземпляры partial()
), которые при включении в определение класса ведут себя как обычные методы экземпляра. (Авторы - Алон Хорев и Ник Коглан в bpo-4331).
Новый singledispatch()
декоратор обеспечивает поддержку универсальных функций с одной отправкой в стандартную библиотеку Python. Там, где объектно-ориентированное программирование фокусируется на группировании нескольких операций над общим набором данных в класс, универсальная функция фокусируется на группировании нескольких реализаций операции, что позволяет ей работать с различными типами данных.
См.также
- PEP 443 – Универсальные функции с одной отправкой
PEP, написанный и реализованный Лукашем Лангой.
total_ordering()
теперь поддерживает возвращаемое значение NotImplemented
из базовой функции сравнения. (Добавлено Кэти Миллер в bpo-10042.)
Чисто python-версия функции partial()
теперь находится в stdlib; в Python она переопределена ускоренной версией C, но доступна для использования в других реализациях. (Автор: Брайан Торн в статье bpo-12428.)
gc (общий сбор)¶
Новая функция get_stats()
возвращает список из трех словарей для каждого поколения, содержащий статистику коллекций с момента запуска интерпретатора. (Добавлено Антуаном Питру в bpo-16351.)
глобус¶
Новая функция escape()
предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в bpo-8402.)
Новая функция предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в .)¶
Новая функция hashlib.pbkdf2_hmac()
предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в PKCS#5 password-based key derivation function 2. bpo-18582 )
Новая функция name
предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в hashlib
. hashlib
bpo-18532 )
Новая функция предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в .)¶
Новая функция hmac
предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в bytearray
. bytes
new()
new()
update()
hashlib
bpo-18240 )
Новая функция hmac.new()
предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в hashlib
. MD5
bpo-17276 )
Новая функция block_size
предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в name
. digest_size
hmac
PEP 247 bpo-18775 )
Новая функция предоставляет способ экранировать специальные символы в имени файла, чтобы они не становились частью расширенного списка, а вместо этого соответствовали буквально. (Добавлено Сергеем Сторчакой в .)¶
Новая функция unescape()
преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в bpo-2927.)
Новая функция HTMLParser
преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в True
. False
True
bpo-13633 )
Новая функция HTMLParser
преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в bpo-15114.)
Новая функция преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в .)¶
Новая функция send_error()
преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в error_message_format
. bpo-12921 )
Новая функция http.server
преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в command line interface. -b/--bind
bpo-17764 )
Новая функция преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в .)¶
Новая функция Lib/idlelib/NEWS.txt
преобразует ссылки на символы HTML5 в соответствующие символы Unicode. (Добавлено Эцио Мелотти в .)
импортный файл¶
InspectLoader
ABC определяет новый метод, source_to_code()
, который принимает исходные данные и путь и возвращает объект кода. Реализация по умолчанию эквивалентна compile(data, path, 'exec', dont_inherit=True)
. (Материалы предоставлены Эриком Сноу и Бреттом Кэнноном в bpo-15627.)
InspectLoader
также теперь имеет реализацию по умолчанию для метода get_code()
. Однако, как правило, желательно переопределять реализацию по умолчанию из соображений производительности. (Добавлено Бреттом Кэнноном в bpo-18072.)
Функция reload()
была перенесена из imp
в importlib
как часть устаревания модуля imp
. (Добавлено Беркером Пексагом в bpo-18193.)
importlib.util
теперь имеет атрибут MAGIC_NUMBER
, предоставляющий доступ к номеру версии байт-кода. Это заменяет функцию get_magic()
в устаревшем модуле imp
. (Автор Бретт Кэннон в bpo-18192.)
Новые importlib.util
функции cache_from_source()
и source_from_cache()
заменяют одноименные функции в устаревшем модуле imp
. (Автор Бретт Кэннон в bpo-18194.)
Новые importlib
функции NamespaceLoader
и InspectLoader
заменяют одноименные функции в устаревшем модуле runpy
. (Автор Бретт Кэннон в python -m
. bpo-18058 )
Новые importlib.util
функции decode_source()
и InspectLoader.get_source()
заменяют одноименные функции в устаревшем модуле . (Автор Бретт Кэннон в .)
Новые importlib.machinery.ExtensionFileLoader
функции get_filename()
и bpo-19152 заменяют одноименные функции в устаревшем модуле . (Автор Бретт Кэннон в .)
Новые функции и заменяют одноименные функции в устаревшем модуле . (Автор Бретт Кэннон в .)¶
Новые inspect
функции command line interface и bpo-18626 заменяют одноименные функции в устаревшем модуле . (Автор Бретт Кэннон в .)
unwrap()
позволяет легко распутывать цепочки функций-оболочек, созданные с помощью functools.wraps()
(и любого другого API, который устанавливает атрибут __wrapped__
для функции-оболочки). (Материалы предоставлены Дэниелом Урбаном, Аароном Айлзом и Ником Когланом в bpo-13266.)
В рамках реализации нового модуля enum
в модуле inspect
теперь значительно улучшена поддержка пользовательских методов __dir__
и динамических атрибутов классов, предоставляемых с помощью метаклассов. (Автор - Итан Фурман в bpo-18929 и bpo-19030.)
getfullargspec()
и getargspec()
теперь используют signature()
API. Это позволяет им поддерживать гораздо более широкий спектр вызываемых объектов, в том числе с атрибутами __signature__
, с метаданными, предоставляемыми argument clinic, объектами functools.partial()
и многим другим. Обратите внимание, что, в отличие от signature()
, эти функции по-прежнему игнорируют атрибуты __wrapped__
и сообщают об уже связанном первом аргументе для связанных методов, поэтому все равно необходимо обновить свой код, чтобы использовать signature()
напрямую, если эти функции необходимы. (Автор: Юрий Селиванов в bpo-17481.)
signature()
теперь поддерживаются функции Python типа duck, что добавляет поддержку функций, скомпилированных с помощью Cython. (Авторы Стефан Бенель и Юрий Селиванов в bpo-17159).
ip-адрес¶
ipaddress
был добавлен в стандартную библиотеку в Python 3.3 как provisional API. С выпуском Python 3.4 это ограничение было снято: ipaddress
теперь считается стабильным API, на который распространяются обычные требования к стандартной библиотеке для поддержания обратной совместимости.
Новым свойством is_global
будет True
, если адрес доступен для глобальной маршрутизации. (Добавлено Питером Муди в bpo-17400.)
регистрация¶
В TimedRotatingFileHandler
добавлен новый параметр atTime, который можно использовать для указания времени суток, когда должен произойти переход. (Добавлено Рональдом Оуссореном в bpo-9556.)
SocketHandler
и DatagramHandler
теперь поддерживают доменные сокеты Unix (установив для port значение None
). (Добавлено Винаем Саджипом в коммите ce46195b56a9.)
fileConfig()
теперь принимает экземпляр подкласса configparser.RawConfigParser
для параметра fname. Это облегчает использование файла конфигурации, когда конфигурация ведения журнала является лишь частью общей конфигурации приложения или когда приложение изменяет конфигурацию перед передачей в fileConfig()
. (Автор: Винай Саджип в bpo-16110).
Данные конфигурации протоколирования, полученные из сокета с помощью функции logging.config.listen()
, теперь можно проверить перед обработкой, указав функцию проверки в качестве аргумента для нового ключевого слова verify. (Добавлено Винаем Саджипом в bpo-15452.)
маршал¶
Версия по умолчанию marshal
была изменена на 3. Код, реализующий новую версию, восстанавливает поведение Python2, заключающееся в записи только одной копии интернированных строк и сохранении интернирования при десериализации, и расширяет эту возможность «одной копии» для любого типа объектов (включая обработку рекурсивных ссылок). Это уменьшает как размер файлов .pyc
, так и объем памяти, занимаемый модулем при загрузке из файла .pyc
(или .pyo
). ((Автор - Кристьян Валюр Йонссон в bpo-16475, с дополнительными дополнениями Антуан Питру в bpo-19219.)
ммап¶
объекты mmap теперь имеют значение weakly referenceable. (Добавлено Валери Ламберт в bpo-4885.)
m¶
start methods spawn
forkserver
multiprocessing
spawn
get_all_start_methods()
get_start_method()
set_start_method()
bpo-8713 m
multiprocessing
context
get_context()
multiprocessing
Pool
bpo-18999 m
За исключением случаев использования старого метода fork start, дочерние процессы больше не наследуют ненужные дескрипторы/файловые дескрипторы от своих родителей (часть bpo-8713).
За исключением случаев использования старого метода fork start, дочерние процессы больше не наследуют ненужные дескрипторы/файловые дескрипторы от своих родителей (часть multiprocessing
) runpy
-m
__main__
spawn
forkserver
-m
bpo-19946 .
оператор¶
__length_hint__()
PEP 424 bpo-16148 р
operator`операто :issue:`16694
р
o¶
Появились новые функции для получения и установки inheritable flag файлового дескриптора (os.get_inheritable()
, os.set_inheritable()
) или дескриптора Windows (os.get_handle_inheritable()
, os.set_handle_inheritable()
).
Появились новые функции для получения и установки cpu_count()
файлового дескриптора (None
, multiprocessing.cpu_count()
) или дескриптора Windows (bpo-17914, ).
Появились новые функции для получения и установки os.path.samestat()
файлового дескриптора (os.path.samefile()
, bpo-11939) или дескриптора Windows ( , ).
Появились новые функции для получения и установки os.path.ismount()
файлового дескриптора (bpo-9035, ) или дескриптора Windows ( , ).
Появились новые функции для получения и установки os.open()
файлового дескриптора (O_PATH
, O_TMPFILE
) или дескриптора Windows (bpo-18673, ).
pdb (почтовый индекс)¶
pdb`pdb (почтовый :keyword:`yield
индекс yield from
asyncio
bpo-16596 )
print``pdb (почтовый :mod:`pdb` индекс :func:`print` ``pdb
print
print
print
print
p
p
repr
str
print
pdb print
print
pdb
bpo-18764 )
соленый огурец¶
pickle
теперь поддерживается (но не используется по умолчанию) новый протокол pickle, протокол 4. Этот новый протокол устраняет ряд проблем, которые присутствовали в предыдущих протоколах, таких как сериализация вложенных классов, очень большие строки и контейнеры, а также классы, метод которых __new__()
принимает аргументы только из ключевых слов. Он также обеспечивает некоторое повышение эффективности.
См.также
- PEP 3154 теперь поддерживается (но не используется по умолчанию) новый протокол pickle, протокол 4. Этот новый протокол устраняет ряд проблем, которые присутствовали в предыдущих протоколах, таких как сериализация вложенных классов, очень большие строки и контейнеры, а также классы, метод которых принимает аргументы только из ключевых слов. Он также обеспечивает некоторое повышение эффективности.
PEP, написанный Антуаном Питру и реализованный Александром Вассалотти.
plistlib - список¶
plistlib`plistlib :func:`~plistlib.load
- списо dump()
loads()
dumps()
FMT_XML
FMT_BINARY
bpo-14455 к
поплиб¶
В poplib
: capa()
,, который возвращает список возможностей, объявленных POP-сервером, и в stls()
, который преобразует сеанс POP3 с открытым текстом в зашифрованный сеанс POP3, если POP сервер поддерживает его, добавлены два новых метода. (Автор Лоренцо Катуччи в статье bpo-4473.)
печать¶
pprint`печат :class:`~pprint.PrettyPrinter
pformat()
pprint()
True
bpo-19132 ь
Длинные строки теперь оборачиваются с использованием обычного синтаксиса продолжения строки в Python. (Автор: Антуан Питру в bpo-17150).
пти¶
pty.spawn()
теперь возвращает значение статуса из os.waitpid()
в дочернем процессе вместо None
. (Автор: Грегори П. Смит).
pydoc¶
Модуль pydoc
теперь основан непосредственно на inspect.signature()
introspection API, что позволяет ему предоставлять информацию о сигнатурах для более широкого спектра вызываемых объектов. Это изменение также означает, что атрибуты __wrapped__
теперь учитываются при отображении справочной информации. (Добавлено Ларри Хастингсом в статье bpo-19674.)
Модуль pydoc
теперь основан непосредственно на self
introspection API, что позволяет ему предоставлять информацию о сигнатурах для более широкого спектра вызываемых объектов. Это изменение также означает, что атрибуты bpo-20710 теперь учитываются при отображении справочной информации. (Добавлено Ларри Хастингсом в статье .)
Модуль pydoc
теперь основан непосредственно на __dir__
introspection API, что позволяет ему предоставлять информацию о сигнатурах для более широкого спектра вызываемых объектов. Это изменение также означает, что атрибуты inspect
теперь учитываются при отображении справочной информации. (Добавлено Ларри Хастингсом в статье .)
Модуль help()
теперь основан непосредственно на pydoc
introspection API, что позволяет ему предоставлять информацию о сигнатурах для более широкого спектра вызываемых объектов. Это изменение также означает, что атрибуты help()
теперь учитываются при отображении справочной информации. (Добавлено Ларри Хастингсом в статье .)
ре¶
Новая функция fullmatch()
и метод regex.fullmatch()
привязывают шаблон к обоим концам строки, чтобы они совпадали. Это позволяет четко указать цель сопоставления, что позволяет избежать ряда незначительных ошибок, при которых символы $
теряются при изменении кода или добавлении альтернатив к существующему регулярному выражению. (Автор: Мэтью Барнетт в статье bpo-16203.)
Новая функция regex objects и метод match objects привязывают шаблон к обоим концам строки, чтобы они совпадали. Это позволяет четко указать цель сопоставления, что позволяет избежать ряда незначительных ошибок, при которых символы bpo-13592 теряются при изменении кода или добавлении альтернатив к существующему регулярному выражению. (Автор: Мэтью Барнетт в статье bpo-17087.)
Новая функция и метод привязывают шаблон к обоим концам строки, чтобы они совпадали. Это позволяет четко указать цель сопоставления, что позволяет избежать ряда незначительных ошибок, при которых символы теряются при изменении кода или добавлении альтернатив к существующему регулярному выражению. (Автор: Мэтью Барнетт в статье .)¶
Новая функция prlimit()
, доступная на платформах Linux с ядром версии 2.6.36 или более поздней и glibc версии 2.13 или более поздней, предоставляет возможность запрашивать или устанавливать ограничения ресурсов для процессов, отличных от того, который выполняет вызов. (Автор: Кристиан Хеймс в bpo-16595.)
Новая функция RLIMIT_MSGQUEUE
, доступная на платформах Linux с ядром версии 2.6.36 или более поздней и glibc версии 2.13 или более поздней, предоставляет возможность запрашивать или устанавливать ограничения ресурсов для процессов, отличных от того, который выполняет вызов. (Автор: Кристиан Хеймс в RLIMIT_NICE
. RLIMIT_RTPRIO
RLIMIT_RTTIME
RLIMIT_SIGPENDING
bpo-19324 )
Новая функция RLIMIT_SBSIZE
, доступная на платформах Linux с ядром версии 2.6.36 или более поздней и glibc версии 2.13 или более поздней, предоставляет возможность запрашивать или устанавливать ограничения ресурсов для процессов, отличных от того, который выполняет вызов. (Автор: Кристиан Хеймс в RLIMIT_SWAP
. RLIMIT_NPTS
bpo-19343 )
выбирать¶
выбирать¶
Shelf`выбират :keyword:`with
with
bpo-13896 ь
выбирать¶
Error()
SameFileError
bpo-1492704 ь
выбирать¶
SMTPChannel
asynchat.async_chat
bpo-11959 ь
выбирать¶
SMTPException
теперь является подклассом OSError
, который позволяет перехватывать ошибки как на уровне сокета, так и на уровне протокола SMTP в одном операторе try/except с помощью кода, который заботится только о том, произошла ошибка или нет. (Автор: Нед Джексон Лавли в bpo-2118.)
разъем¶
Модуль socket теперь поддерживает протокол CAN_BCM
на платформах, которые его поддерживают. (Добавлено Брайаном Торном в bpo-15359.)
Модуль socket теперь поддерживает протокол inheritable flag на платформах, которые его поддерживают. (Добавлено Брайаном Торном в get_inheritable()
. set_inheritable()
)
Модуль socket теперь поддерживает протокол socket.AF_*
на платформах, которые его поддерживают. (Добавлено Брайаном Торном в socket.SOCK_*
. enum
)
Константа AF_LINK
теперь доступна в BSD и OSX.
Константа inet_pton()
теперь inet_ntop()
доступна bpo-7171 в BSD и OSX.
Константа теперь доступна в BSD и OSX.¶
Константа connect()
теперь uri
доступна SQLite URI documentation в BSD bpo-13773 и OSX.
Константа теперь доступна в BSD и OSX.¶
Добавлены PROTOCOL_TLSv1_1
и PROTOCOL_TLSv1_2
(поддержка TLSv1.1 и TLSv1.2); поддержка этих протоколов доступна только в том случае, если Python связан с OpenSSL 1.0.1 или более поздней версии. ((Материалы предоставлены Мишель Орру и Антуаном Питру в bpo-16692.)
Добавлены create_default_context()
и SSLContext
(поддержка TLSv1.1 и TLSv1.2); поддержка этих протоколов доступна только в том случае, если Python связан с OpenSSL 1.0.1 или более поздней версии. ((Материалы предоставлены Мишель Орру и Антуаном Питру в SSLContext
. create_default_context()
SSLContext
bpo-19689 )
SSLContext
метод load_verify_locations()
принимает новый необязательный аргумент cadata, который может быть использован для предоставления сертификатов в кодировке PEM или DER напрямую с помощью строк или байтов, соответственно. (Автор: Кристиан Хеймс в bpo-18138.)
Новая функция get_default_verify_paths()
возвращает именованный набор путей и переменных окружения, которые метод set_default_verify_paths()
использует для установки значений OpenSSL по умолчанию cafile
и capath
. Это может помочь в устранении проблем с проверкой по умолчанию. (Автор Кристиан Хеймс в bpo-18143).
Новая функция SSLContext
возвращает именованный набор путей и переменных окружения, которые метод cert_store_stats()
использует для установки значений OpenSSL по умолчанию X.509
и X.509 CA
. Это может помочь в устранении проблем с проверкой по умолчанию. (Автор Кристиан Хеймс в crl
) get_ca_certs()
CA
bpo-18147 .
Новая функция SSLContext
возвращает именованный набор путей и переменных окружения, которые метод verify_flags
использует для установки значений OpenSSL по умолчанию VERIFY_DEFAULT
и VERIFY_CRL_CHECK_LEAF
. Это может помочь в устранении проблем с проверкой по умолчанию. (Автор Кристиан Хеймс в VERIFY_CRL_CHECK_CHAIN
) VERIFY_X509_STRICT
bpo-8813 .
Новая функция SSLContext
возвращает именованный набор путей и переменных окружения, которые метод load_default_certs()
использует для установки значений OpenSSL по умолчанию purpose=
и SERVER_AUTH
. Это может помочь в устранении проблем с проверкой по умолчанию. (Автор Кристиан Хеймс в purpose=
) CLIENT_AUTH
bpo-19292 .
Две новые функции, доступные только для Windows, enum_certificates()
и enum_crls()
, предоставляют возможность извлекать сертификаты, информацию о сертификатах и CRL из хранилища сертификатов Windows. (Автор Кристиан Хеймс в статье bpo-17134).
Две новые функции, доступные только для Windows, ssl.SSLContext.set_servername_callback()
и bpo-8109, предоставляют возможность извлекать сертификаты, информацию о сертификатах и CRL из хранилища сертификатов Windows. (Автор Кристиан Хеймс в статье ).
Словарь, возвращаемый с помощью SSLSocket.getpeercert()
, содержит дополнительные элементы расширения X509v3
: crlDistributionPoints
, calIssuers
, и OCSP
URI. (Автор: Кристиан Хеймс в bpo-18379.)
статистика¶
Модуль stat
Теперь поддерживается реализацией на языке Си в _stat
. Требуется реализация на языке Си, поскольку большинство значений не стандартизированы и зависят от платформы. (Автор: Кристиан Хеймс в bpo-11016.)
Модуль поддерживает новые флаги ST_MODE
, S_IFDOOR
, S_IFPORT
, и S_IFWHT
. (Добавлено Кристианом Хеймсом в bpo-11016.)
s¶
s¶
check_output()
теперь принимает входной аргумент, который может быть использован для предоставления содержимого stdin
для выполняемой команды. (Добавлено Заком Вайнбергом в bpo-16624.)
getstatus()
и getstatusoutput()
теперь работают в Windows. На самом деле это изменение было непреднамеренно внесено в 3.3.4. (Внесено Тимом Голденом в bpo-10197.)
сунау¶
Метод getparams()
теперь возвращает namedtuple, а не простой кортеж. (Добавлено Клаудиу Попой в bpo-18901.)
sunau.open()
теперь поддерживается протокол управления контекстом: при использовании в блоке with
метод close
возвращаемого объекта будет вызван автоматически в конце блока. (Автор - Сергей Сторчака в bpo-18878.)
AU_write.setsampwidth()
теперь поддерживается запись 24-битных сэмплов, что позволяет использовать модуль для записи 24-битных сэмплов. (Добавлено Сергеем Сторчакой в bpo-19261.)
Методы writeframesraw()
и writeframes()
теперь принимают любые bytes-like object. (Добавлено Сергеем Сторчакой в bpo-8311.)
sys¶
Новая функция sys.getallocatedblocks()
возвращает текущее количество блоков, выделенных интерпретатором. (В CPython с настройкой по умолчанию --with-pymalloc
это распределение выполняется с помощью PyObject_Malloc()
API.) Это может быть полезно для отслеживания утечек памяти, особенно если оно автоматизировано с помощью набора тестов. (Автор Антуан Питру в bpo-13390).
Новая функция interactive mode возвращает текущее количество блоков, выделенных интерпретатором. (В CPython с настройкой по умолчанию __interactivehook__
это распределение выполняется с помощью :c:mod:`sys` API.) Это может быть полезно для отслеживания утечек памяти, особенно если оно автоматизировано с помощью набора тестов. (Автор Антуан Питру в PYTHONSTARTUP
) site
sets it ~/.python-history
readline
PYTHONSTARTUP
sitecustomize
usercustomize
sys
bpo-5845 .
архивный файл¶
Модуль tarfile
теперь поддерживает простой Интерфейс командной строки, который вызывается как скрипт напрямую или через -m
. Его можно использовать для создания и извлечения архивов файлов tar. (Предоставлено Беркером Пексагом в bpo-13477.)
текстовая обертка¶
Класс TextWrapper
имеет два новых атрибута/аргумента конструктора: max_lines
, который ограничивает количество строк в выходных данных, и placeholder
, которая представляет собой строку, которая появится в конце выходных данных, если в ней есть был усечен из-за max_lines. Основываясь на этих возможностях, новая удобная функция shorten()
преобразует все пробелы во входных данных в отдельные пробелы и создает одну строку заданной ширины, которая заканчивается символом-заполнителем (по умолчанию, [...]
). (Материалы предоставлены Антуаном Питру и Сергеем Сторчакой в bpo-18585 и bpo-18725.)
нарезание резьбы¶
Объект Thread
, представляющий основной поток, может быть получен из новой функции main_thread()
. В обычных условиях это будет поток, из которого был запущен интерпретатор Python. (Добавлено Андреем Светловым в bpo-18882.)
обратная связь¶
Новая функция traceback.clear_frames()
использует объект обратной трассировки и очищает локальные переменные во всех фреймах, на которые она ссылается, уменьшая объем потребляемой памяти. (Автор Эндрю Кухлинг в bpo-1565525).
типы¶
Новый дескриптор DynamicClassAttribute()
предоставляет способ определения атрибута, который обычно работает при поиске через объект экземпляра, но который перенаправляется в class __getattr__
при поиске через класс. Это позволяет активировать свойства в классе и использовать виртуальные атрибуты в классе с тем же именем (см. пример в Enum
). (Добавлено Итаном Фурманом в bpo-19030.)
urllib¶
urllib.request
теперь поддерживает data:
URL-адреса с помощью класса DataHandler
. (Добавлено Матиасом Панценбеком в bpo-16423.)
Метод http, который будет использоваться классом Request
, теперь можно указать, установив атрибут класса method
для подкласса. (Добавлено Джейсоном Р. Кумбсом в bpo-18978.)
Request
объекты теперь можно использовать повторно: при изменении атрибутов full_url
или data
обновляются все соответствующие внутренние свойства. Это означает, например, что теперь можно использовать один и тот же объект Request
в более чем одном вызове OpenerDirector.open()
с разными аргументами data или изменять Request
с url
вместо того, чтобы пересчитывать его с нуля. Существует также новый метод remove_header()
, который можно использовать для удаления заголовков из Request
. (Авторы: Алексей Качаев в bpo-16464, Дэниел Возняк в bpo-17485, Дэмиен Брехт и Сентил Кумаран в bpo-17272.)
HTTPError
объекты теперь имеют атрибут headers
, который предоставляет доступ к заголовкам HTTP-ответов, связанных с ошибкой. (Добавлено Беркером Пексагом в bpo-15701.)
единичный тест¶
В классе TestCase
есть новый метод, subTest()
, который создает контекстный менеджер, чей блок with
становится «подтестом». Этот контекстный менеджер позволяет тестовому методу динамически генерировать подтесты, скажем, вызывая контекстный менеджер subTest
внутри цикла. Таким образом, один и тот же метод тестирования может привести к созданию неопределенного числа отдельно идентифицированных и отдельно подсчитанных тестов, каждый из которых будет выполнен, даже если один или несколько из них завершатся неудачей. Например:
class NumbersTest(unittest.TestCase):
def test_even(self):
for i in range(6):
with self.subTest(i=i):
self.assertEqual(i % 2, 0)
результатом будут шесть подтестов, каждый из которых будет указан в подробном выводе модульного теста с меткой, состоящей из имени переменной i
и определенного значения для этой переменной (i=0
, i=1
, и т.д.). Смотрите Различение итераций тестирования с использованием субтестов для получения полной версии этого примера. (Автор - Антуан Питру в bpo-16997.)
unittest.main()
теперь принимает повторяющийся набор имен тестов для defaultTest, тогда как ранее он принимал только одно имя теста в виде строки. (Добавлено Юрки Пуллиайненом в bpo-15132.)
Если значение SkipTest
возникает во время обнаружения теста (то есть на уровне модуля в тестовом файле), то теперь оно сообщается как пропущенное, а не как ошибка. (Добавлено Заком Уэром в bpo-16935.)
discover()
теперь выполняется сортировка обнаруженных файлов для обеспечения согласованного порядка тестирования. (Авторы Мартин Мелин и Джефф Рамнани в bpo-16709).
TestSuite
теперь ссылки на тесты удаляются сразу после запуска теста, если тест прошел успешно. В интерпретаторах Python, которые выполняют сборку мусора, это позволяет выполнять сборку мусора для тестов, если ничто другое не содержит ссылки на тест. Это поведение можно изменить, создав подкласс TestSuite
, который определяет пользовательский метод _removeTestAtIndex
. (Авторы - Том Уордилл, Мэтт Макклюр и Эндрю Светлов в статье bpo-11798.)
Новый контекстный менеджер тестовых утверждений, assertLogs()
, гарантирует, что данный блок кода отправит сообщение журнала, используя модуль logging
. По умолчанию сообщение может исходить от любого регистратора и иметь приоритет INFO
или выше, но может быть указано как имя регистратора, так и альтернативный минимальный уровень ведения журнала. Объект, возвращаемый контекстным менеджером, может быть запрошен для LogRecord
и/или отформатированных сообщений, которые были зарегистрированы. (Добавлено Антуаном Питру в bpo-18937.)
Обнаружение тестов теперь работает с пакетами пространства имен (добавлено Клаудиу Попой в bpo-17457).
unittest.mock
объекты теперь проверяют свои сигнатуры спецификаций при сопоставлении вызовов, что означает, что аргументу теперь можно сопоставлять либо по позиции, либо по имени, а не только по позиции. (Добавлено Антуаном Питру в bpo-17015.)
mock_open()
у объектов теперь есть методы readline
и readlines
. (Добавлено Тошио Куратоми в bpo-17467.)
венв¶
venv
теперь включает в себя сценарии активации для оболочек csh
и fish
. (Добавлено Андреем Светловым в bpo-15417.)
EnvBuilder
и удобная функция create()
принимают новый аргумент ключевого слова with_pip, значение которого по умолчанию равно False
, который определяет, гарантирует ли EnvBuilder
, что pip
является установлен в виртуальной среде. (Добавлено Ником Когланом в bpo-19552 в рамках реализации PEP 453.)
волна¶
Метод getparams()
теперь возвращает namedtuple, а не простой кортеж. (Добавлено Клаудиу Попой в bpo-17487.)
wave.open()
теперь поддерживается протокол управления контекстом. (Добавлено Клаудиу Попой в bpo-17616.)
wave
теперь можно write output to unseekable files. (Авторы: Дэвид Джонс, Гильерме Поло и Сергей Сторчака в bpo-5202.)
Методы writeframesraw()
и writeframes()
теперь принимают любые bytes-like object. (Добавлено Сергеем Сторчакой в bpo-8311.)
слабая ссылка¶
Новый класс WeakMethod
имитирует слабые ссылки на связанные методы. (Добавлено Антуаном Питру в bpo-14631.)
Новый класс finalize
позволяет зарегистрировать обратный вызов, который будет вызываться при сборке мусора объекта, без необходимости тщательного управления жизненным циклом самой слабой ссылки. (Автор Ричард Аудкерк в bpo-15528).
Обратный вызов, если таковой имеется, связанный с ref
, теперь доступен с помощью атрибута __callback__
. (Добавлено Марком Дикинсоном в bpo-17643.)
xml.это дерево¶
Новый синтаксический анализатор, XMLPullParser
, позволяет неблокирующим приложениям анализировать XML-документы. Пример можно увидеть на странице Извлекаемый API для неблокирующего синтаксического анализа. (Автор Антуан Питру в статье bpo-17741).
Функции xml.etree.ElementTree
tostring()
и tostringlist()
, а также метод ElementTree
write()
теперь имеют short_empty_elements keyword-only parameter, обеспечивающие контроль над тем, является ли элементы, не содержащие содержания, записываются в сокращенном (<tag />
) или расширенном (<tag></tag>
) виде. (Материалы предоставлены Ариэлем Поляком и Сергеем Сторчакой в bpo-14377.)
почтовый файл¶
Метод writepy()
класса PyZipFile
имеет новую опцию filterfunc, которая может использоваться для управления тем, какие каталоги и файлы добавляются в архив. Например, это может быть использовано для исключения тестовых файлов из архива. (Автор: Кристиан Тисмер в bpo-19274.)
Значение параметра allowZip64 для ZipFile
и PyZipfile
теперь по умолчанию равно True
. (Добавлено Уильямом Маллардом в bpo-17201.)
Изменения в реализации CPython¶
PEP 445: Настройка распределителей памяти Python¶
PEP 445 добавлены новые интерфейсы уровня C для настройки распределения памяти в интерпретаторе CPython.
См.также
- PEP 445 – Добавление новых API для настройки распределителей памяти Python
PEP, написанный и реализованный Виктором Стиннером.
PEP 442: Завершение разработки безопасного объекта¶
PEP 442 устраняет текущие ограничения и особенности финализации объектов в CPython. С его помощью объекты с методами __del__()
, а также генераторы с предложениями finally
могут быть доработаны, когда они являются частью ссылочного цикла.
В рамках этого изменения глобальные параметры модуля больше не устанавливаются принудительно в None
во время завершения работы интерпретатора в большинстве случаев, вместо этого они полагаются на нормальную работу циклического сборщика мусора. Это позволяет избежать целого класса ошибок во время завершения работы интерпретатора, обычно связанных с методами __del__
, которые преследовали Python с тех пор, как был впервые представлен циклический сборщик мусора.
См.также
- PEP 442 – Завершение создания безопасного объекта
PEP, написанный и реализованный Антуаном Питру.
PEP 456: Безопасный и взаимозаменяемый алгоритм хэширования¶
PEP 456 это продолжение предыдущей работы по исправлению ошибок безопасности, выполненной в алгоритме хэширования Python для устранения определенных DOS-атак, которым могут подвергаться общедоступные API, поддерживаемые поиском по словарю. (Начало текущего раунда улучшений см. в bpo-14621). PEP унифицирует хэш-код CPython, чтобы упростить упаковщику замену другого алгоритма хэширования, и переключает реализацию Python по умолчанию на реализацию SipHash на платформах с 64-разрядным типом данных. Любые различия в производительности по сравнению со старым алгоритмом FNV тривиальны.
PEP добавляет дополнительные поля к sys.hash_info
namedtuple для описания алгоритма хэширования, используемого исполняемым в данный момент двоичным файлом. В остальном PEP не изменяет существующие API CPython.
PEP 436: Клиника аргументации¶
«Argument Clinic» (PEP 436) теперь является частью процесса сборки CPython и может использоваться для упрощения процесса определения и поддержания точных сигнатур для встроенных модулей и модулей расширения стандартных библиотек, реализованных на C.
Некоторые модули расширения стандартной библиотеки были преобразованы для использования Argument Clinic в Python 3.4, а pydoc
и inspect
были соответственно обновлены.
Ожидается, что метаданные сигнатур для программного самоанализа будут добавлены к дополнительному callable, реализованному на C в рамках обновлений Python 3.4.
Примечание
PEP Argument Clinic не полностью соответствует состоянию реализации. В данном случае менеджер релизов и основная команда разработчиков сочли это приемлемым, поскольку Argument Clinic не будет доступен в качестве общедоступного API для использования третьими сторонами в Python 3.4.
См.также
- PEP 436 – Аргументация клиники DSL
PEP, написанный и реализованный Ларри Хастингсом.
Другие изменения в сборке и C API¶
Новая функция
PyType_GetSlot()
была добавлена в стабильный ABI, что позволяет извлекать указатели на функции из слотов именованного типа при использовании ограниченного API. (Автор Мартин фон Левис в bpo-17162.)Новый API предварительной инициализации:c:func:Py_SetStandardStreamEncoding позволяет приложениям, использующим интерпретатор Python, надежно использовать определенную кодировку и обработчик ошибок для стандартных потоков. (Авторы Бастьен Монтань и Ник Коглан в bpo-16129).
Большинство API-интерфейсов Python C, которые не изменяют строковые аргументы, теперь корректно помечаются как принимающие
const char *
, а неchar *
. (Добавлено Сергеем Сторчакой в bpo-1772673.)Новая версия оболочки
python-config
может использоваться даже при отсутствии интерпретатора python (например, в сценариях перекрестной компиляции).PyUnicode_FromFormat()
теперь поддерживает спецификации ширины и точности для%s
,%A
,%U
,%V
,%S
, и%R
. (Авторы - Юси Джей Рэй и Виктор Стиннер в bpo-7330.)Новая функция
PyStructSequence_InitType2()
дополняет существующую функциюPyStructSequence_InitType()
. Разница в том, что она возвращает0
в случае успеха и-1
в случае неудачи.Исходный код CPython теперь можно скомпилировать, используя функции проверки правильности адресов в последних версиях GCC и clang: ложные срабатывания в распределителе малых объектов были отключены. (Добавлено Дхиру Холией в bpo-18596.)
В сборке Windows теперь используются Address Space Layout Randomization и Data Execution Prevention. (Добавлено Кристианом Хеймсом в bpo-16632.)
Новая функция: c:func:PyObject_LengthHint является эквивалентом C API для
operator.length_hint()
. (Добавлено Армином Роначером в bpo-16148.)
другие улучшения¶
Команда python имеет новый option,
-I
,, который приводит к ее запуску в «изолированном режиме», что означает, чтоsys.path
не содержит ни каталога скрипта, ни каталога пользователя.site-packages
каталог, и всеPYTHON*
переменные окружения игнорируются (это подразумевает как-s
, так и-E
). В будущем могут быть применены и другие ограничения, цель которых - изолировать выполнение скрипта от пользовательской среды. Это уместно, например, когда для запуска системного скрипта используется Python. В большинстве систем POSIX его можно и нужно использовать в#!
строке системных скриптов. (Автор: Кристиан Хеймс в bpo-16499.)В интерактивном интерпретаторе в системах, поддерживающих
readline
, теперь по умолчанию включено завершение с помощью табуляции. Журнал также включен по умолчанию и записывается (и считывается из) в файл~/.python-history
. (Материалы предоставлены Антуаном Питру и Эриком Араужо в bpo-5845.)Вызов интерпретатора Python с помощью
--version
теперь выводит версию в стандартный вывод вместо стандартной ошибки (bpo-18338). Аналогичные изменения были внесены вargparse
(bpo-18920) и другие модули, которые имеют возможности вызова, подобные сценариям (bpo-18922).Установщик Windows CPython теперь добавляет
.py
в переменнуюPATHEXT
при регистрации расширений, что позволяет пользователям запускать скрипт на python в командной строке Windows, просто вводя его имя без расширения.py
. (Автор: Пол Мур в bpo-18569.)Новый целевой объект
make
coverage-report соберет python, запустит набор тестов и сгенерирует отчет о покрытии HTML для кодовой базы C, используяgcov
и lcov.Параметр
-R
в python regression test suite теперь также проверяет наличие утечек при распределении памяти, используяsys.getallocatedblocks()
. (Добавлено Антуаном Питру в bpo-13390.)python -m
теперь работает с пакетами пространства имен.Модуль
stat
теперь реализован на C, что означает, что он получает значения для своих констант из заголовочных файлов C, вместо того, чтобы жестко кодировать значения в модуле python, как это было ранее.Загрузка нескольких модулей python из одного модуля операционной системы (
.so
,.dll
) теперь работает корректно (ранее программа автоматически возвращала первый модуль python в файле). (Автор: Вацлав Шмилауэр в статье bpo-16421.)Был добавлен новый код операции
LOAD_CLASSDEREF
, чтобы исправить ошибку при загрузке свободных переменных в тела классов, которая могла быть вызвана определенным использованием __prepare__. (Добавлено Бенджамином Питерсоном в bpo-17853.)Виктор Стиннер выявил и исправил ряд сбоев, связанных с MemoryError, с помощью своего инструмента на основе PEP 445
pyfailmalloc
(bpo-18408, bpo-18520).Команда
pyvenv
теперь поддерживает опцию--copies
, позволяющую использовать копии, а не символические ссылки, даже в системах, где символические ссылки используются по умолчанию. (Добавлено Винаем Саджипом в bpo-18807.)Команда
pyvenv
также принимает параметр--without-pip
, чтобы отключить автоматическую загрузку pip в виртуальную среду, которая в противном случае выполнялась бы автоматически. (Добавлено Ником Когланом в bpo-19552 в рамках реализации PEP 453.)Название кодировки теперь необязательно в значении, заданном для переменной окружения
PYTHONIOENCODING
. Это позволяет задать только обработчик ошибок, не меняя кодировку по умолчанию. (Добавлено Сергеем Сторчакой в bpo-18818.)Функции модуля
bz2
,lzma
, иgzip
open
теперь поддерживают режимx
(эксклюзивное создание). (Авторы - Тим Хини и Ваджраски Кок в книге bpo-19201, bpo-19222, и bpo-19223.)
Значительная оптимизация¶
Декодер UTF-32 теперь работает в 3-4 раза быстрее. (Добавлено Сергеем Сторчакой в bpo-14625.)
Стоимость коллизий хэшей для наборов теперь снижена. Каждая проверка по хэш-таблице теперь проверяет ряд последовательных смежных пар ключ/хэш-функция, прежде чем продолжить выполнение случайных проверок по хэш-таблице. Это позволяет использовать локальность кэша для снижения затрат на разрешение коллизий. Схема разрешения коллизий может быть описана как гибрид линейного зондирования и открытой адресации. Количество дополнительных линейных зондирований по умолчанию равно девяти. Это можно изменить во время компиляции, задав LINEAR_PROBES любое значение. Установите LINEAR_PROBES=0, чтобы полностью отключить линейное зондирование. (Материал подготовлен Раймондом Хеттингером в bpo-18771.)
Переводчик начинает работать примерно на 30% быстрее. Для ускорения работы необходимо принять несколько мер. Интерпретатор загружает меньше модулей при запуске, например, модули
re
,collections
иlocale
и их зависимости больше не импортируются по умолчанию. Модуль marshal был улучшен для ускорения загрузки скомпилированного кода на Python. (Материалы подготовлены Антуаном Питру, Кристианом Хеймсом и Виктором Стиннером в bpo-19219, bpo-19218, bpo-19209, bpo-19205 и bpo-9548.)bz2.BZ2File
теперь в большинстве случаев работает так же быстро или даже быстрее, чем версия Python2.lzma.LZMAFile
также была оптимизирована. (Вклад Сергея Сторчаки и Надима Вауды в bpo-16034).random.getrandbits()
работает на 20%-40% быстрее для небольших целых чисел (наиболее распространенный вариант использования). (Добавлено Сергеем Сторчакой в bpo-16674.)Благодаря использованию преимуществ нового формата хранения струн, обработка струн теперь происходит значительно быстрее. (Авторы: Виктор Стиннер и Антуан Питру в bpo-15596.)
Устранена проблема с производительностью в
io.FileIO.readall()
. Это особенно касается Windows и значительно ускоряет передачу значительных объемов данных черезsubprocess
. (Автор Ричард Аудкерк в bpo-15758).html.escape()
теперь работает в 10 раз быстрее. (Автор Мэтт Брайант в bpo-18020.)В Windows вместо CRT
malloc
вobmalloc
теперь используется собственныйVirtualAlloc
. Искусственные тесты показывают экономию памяти примерно на 3%.os.urandom()
теперь используется лениво открываемый постоянный файловый дескриптор, чтобы избежать использования множества файловых дескрипторов при параллельном запуске из нескольких потоков. (Добавлено Антуаном Питру в bpo-18756.)
Осуждаемый¶
В этом разделе рассматриваются различные API и другие функции, которые были признаны устаревшими в Python 3.4 и будут удалены в Python 3.5 или более поздней версии. В большинстве (но не во всех) случаев использование устаревших API приводит к появлению DeprecationWarning
при запуске интерпретатора с включенными предупреждениями об устаревании (например, с помощью -Wd
).
Амортизация в Python API¶
Как упоминалось в PEP 451: Тип спецификации модуля для системы импорта, ряд методов и функций
importlib
являются устаревшими:importlib.find_loader()
заменяется наimportlib.util.find_spec()
;importlib.machinery.PathFinder.find_module()
заменяется наimportlib.machinery.PathFinder.find_spec()
;importlib.abc.MetaPathFinder.find_module()
заменяется наimportlib.abc.MetaPathFinder.find_spec()
;importlib.abc.PathEntryFinder.find_loader()
иfind_module()
заменяются наimportlib.abc.PathEntryFinder.find_spec()
; все методыxxxLoader
ABCload_module
(importlib.abc.Loader.load_module()
,importlib.abc.InspectLoader.load_module()
,importlib.abc.FileLoader.load_module()
,importlib.abc.SourceLoader.load_module()
) больше не следует реализовывать, вместо этого загрузчики должны реализовать методexec_module
(importlib.abc.Loader.exec_module()
,importlib.abc.InspectLoader.exec_module()
importlib.abc.SourceLoader.exec_module()
) и позволить системе импорта позаботиться об остальном; иimportlib.abc.Loader.module_repr()
,importlib.util.module_for_loader()
,importlib.util.set_loader()
, иimportlib.util.set_package()
больше не нужны, поскольку их функции теперь автоматически выполняются системой импорта.Модуль
imp
ожидает объявления устаревшим. Чтобы сохранить совместимость с базами кода Python 2/3, удаление модуля в настоящее время не запланировано.Модуль
formatter
ожидает объявления устаревшим и планируется к удалению в Python 3.6.MD5
поскольку значение по умолчанию digestmod для функцииhmac.new()
устарело. В Python 3.6 в качестве аргумента digestmod потребуется явно указать имя дайджеста или конструктор.Внутренний класс
Netrc
в модулеftplib
уже довольно давно задокументирован как устаревший в своей строке документации. Теперь он выдаетDeprecationWarning
и будет полностью удален в Python 3.5.Недокументированный аргумент endtime для
subprocess.Popen.wait()
не должен был отображаться и, надеюсь, не используется; он устарел и, скорее всего, будет удален в Python 3.5.Аргумент strict для
HTMLParser
устарел.Функции
plistlib
readPlist()
,writePlist()
,readPlistFromBytes()
, иwritePlistToBytes()
признаны устаревшими в пользу соответствующих новых функцийload()
,dump()
,loads()
, иdumps()
.Data()
не рекомендуется использовать только конструкторbytes
.Ключ
sysconfig
SO
устарел, он был заменен наEXT_SUFFIX
.Режим
U
, используемый различными функциямиopen
, устарел. В Python3 он не делает ничего полезного и должен быть заменен соответствующим использованиемio.TextIOWrapper
(при необходимости) и его аргумента newline.Аргумент parser для
xml.etree.ElementTree.iterparse()
устарел, как и аргумент html дляXMLParser()
. Чтобы подготовиться к удалению последнего, все аргументы дляXMLParser
должны передаваться с помощью ключевого слова.
Устаревшие функции¶
Удаленный¶
Операционные Системы Больше не поддерживаются¶
Из средств разработки исходного кода и сборки была удалена поддержка следующих операционных систем:
Удаление API и функций¶
Были удалены следующие устаревшие и ранее не рекомендованные API и функции:
Неиспользуемые каталоги
Misc/TextMate
иMisc/vim
были удалены (смотрите devguide для получения рекомендаций о том, что использовать вместо них).Макрос makefile
SO
удален (он был заменен макросамиSHLIB_SUFFIX
иEXT_SUFFIX
) (bpo-16754).Поле
PyThreadState.tick_counter
было удалено; его значение потеряло смысл с версии Python 3.2, когда был введен «новый GIL» (bpo-19199).PyLoader
иPyPycLoader
были удалены изimportlib
. (Добавлено Тарасом Ляпуном в bpo-15641.)Аргумент strict для
HTTPConnection
иHTTPSConnection
был удален. «Простые ответы» в стиле HTTP 0.9 больше не поддерживаются.Устаревшие методы получения и установки
urllib.request.Request
add_data
,has_data
,get_data
,get_type
,get_host
,get_selector
,set_proxy
,get_origin_req_host
, иis_unverifiable
были удалены (вместо этого используйте прямой доступ к атрибутам).Поддержка загрузки устаревшего
TYPE_INT64
была удалена изmarshal
. (Добавлено Дэном Рити в bpo-15480.)inspect.Signature
: теперь требуется, чтобы параметры, относящиеся только к позиции, имели допустимое имя.object.__format__()
больше не принимает непустые форматные строки, теперь вместо них появляетсяTypeError
. Использование непустой строки устарело начиная с версии Python 3.2. Это изменение было внесено для предотвращения ситуации, когда ранее работавший (но некорректный) код начинал сбоить, если объект получал метод __format__, что означает, что теперь ваш код может вызыватьTypeError
если вы используете код формата's'
с объектами, у которых нет метода __format__, который его обрабатывает. Справочную информацию смотрите в разделе bpo-7994.difflib.SequenceMatcher.isbjunk()
иdifflib.SequenceMatcher.isbpopular()
были признаны устаревшими в версии 3.2 и теперь удалены: используйтеx in sm.bjunk
иx in sm.bpopular
, где sm - этоSequenceMatcher
объект (bpo-13248).
Очистка кода¶
Неиспользуемый и недокументированный внутренний класс
Scanner
был удален из модуляpydoc
.Закрытый и фактически неиспользуемый модуль
_gestalt
был удален вместе с закрытыми функциямиplatform
_mac_ver_lookup
,_mac_ver_gstalt
, и_bcd2str
, которые могли быть только вызывается в сильно поврежденных системах OSX (см. bpo-18393).Жестко закодированные копии некоторых
stat
констант, которые были включены в пространство имен модуляtarfile
, были удалены.
Перенос на Python 3.4¶
В этом разделе перечислены ранее описанные изменения и другие исправления ошибок, которые могут потребовать внесения изменений в ваш код.
Изменения в поведении команды «python»¶
В оболочке posix присвоение переменной окружения
PATH
пустого значения эквивалентно отказу от ее установки вообще. Однако присвоениеPYTHONPATH
пустому значению не было эквивалентно отказу от его установки вообще: присвоениеPYTHONPATH
пустому значению было эквивалентно присвоению ему значения.
, что приводит к путанице при рассуждении по аналогии к тому, как работаетPATH
. Теперь поведение соответствует соглашению posix дляPATH
.Выходные данные [Внешние ссылки, блоки Y] отладочной (
--with-pydebug
) сборки интерпретатора CPython теперь по умолчанию отключены. Их можно снова включить, используя опцию-X showrefcount
. (Автор - Эцио Мелотти в bpo-17323.)Команда python и большинство сценариев stdlib (а также
argparse
) теперь выводят информацию--version
вstdout
вместоstderr
(список проблем смотрите в другие улучшения выше)..
Изменения в Python API¶
Азбука, определенная в
importlib.abc
, теперь либо вызывает соответствующее исключение, либо возвращает значение по умолчанию вместо того, чтобы вызыватьNotImplementedError
вслепую. Это повлияет только на код, вызывающийsuper()
и полностью переходящий к азбуке. Для обеспечения совместимости перехватите обаNotImplementedError
или соответствующее исключение по мере необходимости.Тип модуля теперь по умолчанию инициализирует атрибуты
__package__
и__loader__
вNone
. Чтобы определить, были ли эти атрибуты установлены обратно совместимым образом, используйте, напримерgetattr(module, '__loader__', None) is not None
. (bpo-17115.)importlib.util.module_for_loader()
теперь устанавливает__loader__
и__package__
безоговорочно для правильной поддержки перезагрузки. Если это нежелательно, вам нужно будет установить эти атрибуты вручную. Вы можете использоватьimportlib.util.module_to_load()
для управления модулем.Импорт теперь сбрасывает соответствующие атрибуты (например,
__name__
,__loader__
,__package__
,__file__
,__cached__
) безоговорочно при перезагрузке. Обратите внимание, что это восстанавливает поведение до версии 3.3, поскольку это означает, что модуль повторно найден при перезагрузке (bpo-19413).Замороженные пакеты больше не присваивают
__path__
списку, содержащему название пакета, теперь они присваивают ему значение пустого списка. Предыдущее поведение могло привести к неправильным действиям системы импорта при импорте подмодулей, если бы также существовал каталог с тем же именем, что и у замороженного пакета. Правильный способ определить, является ли модуль пакетом или нет, - это использоватьhasattr(module, '__path__')
(bpo-18065).Замороженные модули больше не определяют атрибут
__file__
. Установка атрибута для замороженных модулей семантически некорректна, поскольку они не загружаются из какого-либо определенного местоположения. Если вам необходимо знать, что модуль создан из замороженного кода, вы можете посмотреть, установлено ли значение__spec__.location
для модуля в'frozen'
, проверить, является ли загрузчик подклассомimportlib.machinery.FrozenImporter
или необходима совместимость с Python 2 вы можете использоватьimp.is_frozen()
.py_compile.compile()
теперь вызываетFileExistsError
, если путь к файлу, в который он будет записан, является символической ссылкой или необычным файлом. Это служит предупреждением о том, что при импорте эти файлы будут перезаписаны обычным файлом, независимо от того, какой тип пути к файлу был указан изначально.importlib.abc.SourceLoader.get_source()
больше не вызываетImportError
, когда загружаемый исходный код запускаетSyntaxError
илиUnicodeDecodeError
. ПосколькуImportError
должно вызываться только тогда, когда исходный код не может быть найден, но он должен быть найден, было сочтено чрезмерным / перегружающим это значение, когда исходный код найден, но неправильно структурирован. Если вы раньше ловили ImportError и хотите продолжать игнорировать проблемы с синтаксисом или декодированием, перехватите все три исключения сейчас.functools.update_wrapper()
иfunctools.wraps()
теперь правильно установите атрибут__wrapped__
для переносимой функции, даже если для этой функции также был установлен атрибут__wrapped__
. Это означает, что атрибуты__wrapped__
теперь корректно связывают стек оформленных функций, а не каждый атрибут__wrapped__
в цепочке, ссылающийся на самую внутреннюю функцию. Библиотеки самоанализа, которые предполагали, что предыдущее поведение было преднамеренным, могут использоватьinspect.unwrap()
для доступа к первой функции в цепочке, у которой нет атрибута__wrapped__
.inspect.getfullargspec()
был повторно реализован поверхinspect.signature()
и, следовательно, обрабатывает гораздо более широкий спектр вызываемых объектов, чем это было в прошлом. Ожидается, что дополнительные встроенные и расширенные вызываемые модули получат метаданные сигнатур в течение серии Python 3.4. Код, который предполагает, чтоinspect.getfullargspec()
не будет работать с вызываемыми модулями, отличными от Python, возможно, потребуется соответствующим образом скорректировать.importlib.machinery.PathFinder
теперь передает текущий рабочий каталог объектам вsys.path_hooks
для пустой строки. Это приводит к тому, чтоsys.path_importer_cache
никогда не содержит''
, таким образом, при повторении поsys.path_importer_cache
на основеsys.path
не будут найдены все ключи.__file__
модуля при импорте в текущий рабочий каталог теперь также будет иметь абсолютный путь, в том числе при использовании-m
с интерпретатором (за исключением__main__.__file__
, когда скрипт был выполнен непосредственно с использованием относительного пути). (Автор Бретт Кэннон в bpo-18416). указывается в командной строке) (bpo-18416).Удаление аргумента strict на
HTTPConnection
иHTTPSConnection
изменяет значение остальных аргументов, если вы указываете их позиционно, а не по ключевому слову. Если вы обращали внимание на предупреждения об устаревании, ваш код уже должен был указывать какие-либо дополнительные аргументы с помощью ключевых слов.Строки между
from __future__ import ...
операторами теперь всегда содержатSyntaxError
. Ранее, если не было начальной строки документа, промежуточная строка иногда игнорировалась. Это приводит CPython в соответствие со спецификацией языка; Jython и PyPy уже были. (bpo-17434).ssl.SSLSocket.getpeercert()
иssl.SSLSocket.do_handshake()
теперь вызываютOSError
с помощьюENOTCONN
, когдаSSLSocket
не подключен, вместо предыдущего действия с вызовомAttributeError
. Кроме того,getpeercert()
вызоветValueError
, если рукопожатие еще не было выполнено.base64.b32decode()
теперь вызываетbinascii.Error
, когда входная строка содержит символы, отличные от алфавита b32, вместоTypeError
. Этот конкретныйTypeError
был пропущен при преобразовании другихTypeError
. (Добавлено Сергеем Сторчакой в bpo-18011.) Примечание: это изменение также было непреднамеренно применено в Python 3.3.3.Атрибут
file
теперь автоматически закрывается, когда создается экземплярcgi.FieldStorage
для сбора мусора. Если вы были потянуть за объект файла отдельно отcgi.FieldStorage
инстанции и не держал экземпляр живым, то вы должны либо хранить всюcgi.FieldStorage
экземпляр или считывать содержимое файла передcgi.FieldStorage
экземпляр собран «мусор».Вызов
read
илиwrite
в закрытом SSLSocket теперь вызывает информативныйValueError
, а не предыдущий, более загадочныйAttributeError
(bpo-9177).slice.indices()
больше не выдает значениеOverflowError
для больших значений. Как следствие этого исправления,slice.indices()
теперь выдает значениеValueError
, если задана отрицательная длина; ранее оно возвращало бессмысленные значения (bpo-14794).Конструктор
complex
, в отличие от функцийcmath
, неправильно принимал значенияfloat
, если специальный метод объекта__complex__
возвращал единицу. Теперь это поднимает вопросTypeError
. (bpo-16290.)Конструктор
int
в версиях 3.2 и 3.3 ошибочно принимает значенияfloat
для параметра base. Маловероятно, что кто-то этим занимался, но если это так, то сейчас это вызоветTypeError
(bpo-16772).Значения по умолчанию для аргументов, содержащих только ключевые слова, теперь вычисляются * после* значений по умолчанию для обычных аргументов ключевых слов, а не до. Надеюсь, никто не написал код, который зависел бы от предыдущего ошибочного поведения (bpo-16967).
Устаревшие состояния потоков теперь удаляются после
fork()
. Это может привести к высвобождению некоторых системных ресурсов, которые ранее неправильно поддерживались в постоянном режиме (например, подключения к базе данных, хранящиеся в локальном хранилище потоков). (bpo-17094.)Имена параметров в
__annotations__
dicts теперь изменены должным образом, аналогично__kwdefaults__
. (Добавлено Юрием Селивановым в bpo-20625.)hashlib.hash.name
теперь идентификатор всегда возвращается строчными буквами. Ранее некоторые встроенные хэши имели имена в верхнем регистре, но теперь, когда это официальный открытый интерфейс, именование стало согласованным (bpo-18532).Поскольку
unittest.TestSuite
теперь удаляет ссылки на тесты после их запуска, тестовые наборы, которые повторно используютTestSuite
для повторного запуска набора тестов, могут завершиться ошибкой. Наборы тестов не следует повторно использовать таким образом, поскольку это означает, что состояние сохраняется между запусками тестов, нарушая изоляцию тестов, которую должен обеспечиватьunittest
. Однако, если отсутствие изоляции считается приемлемым, старое поведение можно восстановить, создав подклассTestSuite
, который определяет метод_removeTestAtIndex
, который ничего не делает (см.TestSuite.__iter__()
) (bpo-11798).unittest
теперь используетargparse
для синтаксического анализа командной строки. Существуют определенные недопустимые формы команд, которые раньше работали и которые больше не разрешены; теоретически это не должно вызывать проблем с обратной совместимостью, поскольку запрещенные формы команд не имели никакого смысла и вряд ли будут использоваться.Функции
re.split()
,re.findall()
, иre.sub()
, а также методыgroup()
иgroups()
объектовmatch
теперь всегда возвращают байт объект, если строка, которую нужно сопоставить, равна bytes-like object. Ранее тип возвращаемого значения соответствовал типу ввода, поэтому, если ваш код зависел от возвращаемого значения, скажем,bytearray
, вам нужно будет изменить свой код.audioop
функции теперь немедленно выдают ошибку при вводе строки, вместо случайного сбоя позже (bpo-16685).Новый аргумент convert_charrefs в
HTMLParser
в настоящее время по умолчанию имеет значениеFalse
для обеспечения обратной совместимости, но в конечном итоге будет изменен на значение по умолчаниюTrue
. Рекомендуется добавлять это ключевое слово с соответствующим значением ко всем вызовамHTMLParser
в вашем коде (bpo-13633).Поскольку аргумент digestmod для функции
hmac.new()
в будущем не будет иметь значения по умолчанию, все вызовыhmac.new()
должны быть изменены, чтобы явно указывать digestmod (bpo-17276).Вызов
sysconfig.get_config_var()
с помощью клавишиSO
или поискSO
в результатах вызоваsysconfig.get_config_vars()
не рекомендуется. Этот ключ следует заменить наEXT_SUFFIX
илиSHLIB_SUFFIX
, в зависимости от контекста (bpo-19555).Любые вызовы функций
open
, которые указываютU
, должны быть изменены.U
неэффективен в Python3 и в конечном итоге приведет к ошибке при использовании. В зависимости от функции, эквивалент ее старого поведения в Python2 может быть достигнут либо с помощью аргумента newline, либо, при необходимости, путем обертывания потока вTextIOWrapper
, чтобы использовать его аргумент newline (bpo-15204).Если вы используете
pyvenv
в скрипте и хотите, чтобы pip *не устанавливался, вы должны добавить--without-pip
в свой вызов команды.Поведение по умолчанию для
json.dump()
иjson.dumps()
при указании отступа изменилось: после элемента, разделяющего запятые в концах строк, больше не появляются конечные пробелы. Это будет иметь значение только в том случае, если у вас есть тесты, которые проводят сравнение таких выходных данных с учетом пробелов (bpo-16333).doctest
теперь выполняется поиск тестов doctest в строках модуля расширения__doc__
, поэтому, если в вашем тестовом поиске doctest есть модули расширения, в которых есть элементы, похожие на тесты doctest, вы можете увидеть ошибки тестирования, которых раньше никогда не видели, при выполнении тестов (bpo-3158).Модуль
collections.abc
был слегка переработан в рамках улучшений при запуске Python. Как следствие, теперь при импортеcollections
автоматически импортируетсяcollections.abc
. Если ваша программа зависела от (недокументированного) неявного импорта, вам нужно будет добавить явныйimport collections.abc
(bpo-20784).
Изменения в C API¶
PyEval_EvalFrameEx()
,PyObject_Repr()
иPyObject_Str()
, наряду с некоторыми другими внутренними API-интерфейсами C, теперь включают в себя утверждение отладки, которое гарантирует, что они не будут использоваться в ситуациях, когда они могут автоматически отменить текущий активный интерфейс. исключение. В случаях, когда ожидается и желательно отключить активное исключение (например, потому что оно уже было сохранено локально с помощьюPyErr_Fetch()
или намеренно заменяется другим исключением), потребуется явный вызовPyErr_Clear()
, чтобы избежать запуск утверждения при вызове этих операций (прямо или косвенно) и выполнении с версией Python, которая скомпилирована с включенными утверждениями.PyErr_SetImportError()
теперь устанавливаетTypeError
, когда его аргумент msg не задан. Ранее возвращалось толькоNULL
без каких-либо исключений.Результатом обратного вызова
PyOS_ReadlineFunctionPointer
теперь должна быть строка, выделенная с помощьюPyMem_RawMalloc()
илиPyMem_RawRealloc()
, илиNULL
, если произошла ошибка, вместо строки, выделенной с помощьюPyMem_Malloc()
илиPyMem_Realloc()
(bpo-16742)PyThread_set_key_value()
теперь всегда устанавливайте значение. В Python 3.3 функция ничего не делала, если ключ уже существует (если текущее значение не является указателем на``NULL``).Поле
f_tstate
(состояние потока) в структуреPyFrameObject
было удалено, чтобы исправить ошибку: объяснение смотрите в bpo-14432.
Изменено в версии 3.4.3¶
PEP 476: Включение проверки сертификата по умолчанию для http-клиентов stdlib¶
http.client
и модули, которые его используют, такие как urllib.request
и xmlrpc.client
, теперь будут проверять, что сервер предоставляет сертификат, подписанный центром сертификации в хранилище доверия платформы, и имя хоста которого совпадает с именем хоста, запрашиваемым по умолчанию, что значительно повышает безопасность многих приложений.
Для приложений, которым требуется прежнее поведение, они могут передавать альтернативный контекст:
import urllib.request
import ssl
# This disables all verification
context = ssl._create_unverified_context()
# This allows using a specific certificate for the host, which doesn't need
# to be in the trust store
context = ssl.create_default_context(cafile="/path/to/file.crt")
urllib.request.urlopen("https://invalid-cert", context=context)