Что нового в Python 3.7

задняя часть Python API Программа перевода самородков

Что нового в Python 3.7

  • Версия: 3.7.0a1
  • Дата: 27 сентября 2017 г.

В этой статье описываются новые возможности Python 3.7 (по сравнению с версией 3.6).

смотрите подробностиСписок изменений.

Уведомление:Пользователи предварительных версий должны знать, что этот документ в настоящее время является черновиком. С выпуском Python 3.7 последуют значительные обновления, поэтому стоит вернуться, даже если вы читали более ранние версии.

Краткое изложение особенностей версии

новые возможности

PEP 538: Проблема автоматического принуждения кодирования локализации устаревшего языка C

Определение разумной стратегии по умолчанию для работы с «7-битным ASCII», неявно принятым кодировкой локализации C по умолчанию, в настоящее время на платформах, отличных от Windows, было бесконечной проблемой в серии Python 3.

PEP 538Обновлен интерфейс командной строки интерпретатора по умолчанию, чтобы автоматически приводить локализованную кодировку к пригодной для использования кодировке на основе UTF-8, которая является новой переменной среды, описанной в документации.PYTHONCOERCECLOCALE. Автоматически устанавливается таким образомLC_CTYPEозначает основной интерпретатор и расширения языка C для распознавания локализации (например,readline) будет использовать UTF-8 в качестве кодировки текста по умолчанию вместо ASCII.

PEP 11Определения поддержки платформы в , также были обновлены, чтобы ограничить поддержку полнотекстовой обработки соответствующей конфигурацией локализованного кодирования, отличной от ASCII.

Как часть изменения, при использовании любой из принудительно определенных целевых кодировок (в настоящее времяC.UTF-8,C.utf8иUTF-8),stdinиstdoutОбработчик ошибок по умолчанию для теперьsurrogateescape(вместоstrict);иstderrОбработчик ошибок по умолчанию по-прежнемуbackslashreplace, независимо от локали.

Приведение кодировки локализации по умолчанию является неявным, но для отладки потенциальных проблем интеграции, связанных с локализацией, его можно задать, установивPYTHONCOERCECLOCALE=warnзапросить прямое использованиеstderrВынести четкое предупреждение. Этот параметр заставляет среду выполнения Python выдавать предупреждение, если устаревшие локализации C все еще активны при инициализации основного интерпретатора.

Смотрите также:

PEP 538— Принудительное преобразование устаревшей кодировки локализации C в кодировку на основе UTF-8.

PEP был написан и реализован Ником Когланом.

Дополнительные языковые обновления

  • Теперь аргументы передаются какой-то функции (argument) может превышать 255, а формальные параметры функции (parameter) может превышать 255. (Предоставил Сергей Сторчакаbpo-12844иbpo-18896. )
  • bytes.fromhex()иbytearray.fromhex()Все пробельные символы ASCII, а не только пробелы, теперь будут игнорироваться. (Предоставлено Робертом Сяоbpo-28927. )
  • теперь, когдаfrom ... import ...когда это не удается,ImportErrorИмя модуля и модуль будут отображаться__file__дорожка. (Предоставлено Матиасом Буссоньеbpo-29546. )
  • Теперь поддерживается привязка циклического импорта, содержащего абсолютный импорт, к подмодулю по имени. (Предоставил Сергей Сторчакаbpo-30024. )
  • в настоящее время,object.__format__(x,'')Эквивалентноstr(x), вместоformat(str(self),''). (Предоставил Сергей Сторчакаbpo-28974. )

новый модуль

  • В настоящее время нет.

улучшенный модуль

argparse

В большинстве команд unixparse_intermixed_args()Позволяет пользователям смешивать параметры и позиционные аргументы в командной строке и поддерживает большинство, но не все функции argparse. (Предоставлено paul.j3bpo-14191. )

binascii

b2a_uu()Теперь функции могут принимать необязательныйbacktickАргумент ключевого слова, когда его значение истинно, все «0» будут заменены на'`'вместо пробелов. (Предоставил Сян Чжанbpo-30103. )

calendar

HTMLCalendarКлассы имеют новый атрибут класса, который упрощает настройку классов CSS в сгенерированном HTML-календаре. (Предоставил Оз Тирамbpo-30095. )

cgi

parse_multipart()в видеFieldStorageвозвращает тот же результат: для нефайловых полей значение, связанное с ключом, представляет собой список строк, а не байтов. (Предоставлено Пьером Квентелемbpo-29979. )

contextlib

добавленcontextlib.asynccontextmanager(). (По материалам Jelle Zijlstrabpo-29679. )

dis

dis()Функции теперь могут дизассемблировать вложенные объекты кода (разбор кода, выражения генератора и вложенные функции, а также код для построения вложенных классов). (Предоставил Сергей Сторчакаbpo-11822. )

distutils

README.rst теперь включен в стандартный список README distutils, который, в свою очередь, включен в каждый исходный код. (Предоставлено Райаном Гонсалесомbpo-11913. )

http.server

SimpleHTTPRequestHandlerПоддержка заголовка HTTP If-Modified-Since. Если целевой файл не был изменен по истечении времени, указанного в заголовке, сервер возвращает код состояния ответа 304. (Предоставлено Пьером Квентелемbpo-29654. )

существуетSimpleHTTPRequestHandlerдобавлено вdirectoryпараметры в командной строкеserverмодуль добавлен--directory. С этим параметром сервер будет работать в указанном каталоге, используя по умолчанию текущий рабочий каталог. (Предоставлено Стефаном Виртелем и Жюльеном Паларомbpo-28707. )

locale

существуетlocaleмодульныйformat_string()В метод добавлен еще один параметрmonetary. еслиmonetaryЗначение true преобразуется в использование разделителя тысяч валюты и группировки строк. (Предоставлено Гарвитомbpo-10379. )

math

новыйremainder()Функция реализует операцию остатка в стиле IEEE 754. (Предоставлено Марком Дикинсономbpo-29962. )

os

добавленfwalk()серединаbytesподдержка пути. (Предоставил Сергей Сторчакаbpo-28682. )
(Contributed by Serhiy Storchaka in bpo-28682.)

На платформах Unix добавлена ​​поддержкаscandir()серединаfile descriptorsслужба поддержки. (Предоставил Сергей Сторчакаbpo-25996. )

новыйos.register_at_fork()Функции позволяют выполнять зарегистрированные обратные вызовы Python в ответвлении процесса. (Предоставлено Антуаном Питруbpo-16500. )

pdb

set_trace()теперь требуется необязательныйheaderОбязательные ключевые аргументы. Если указано, оно будет выведено на консоль перед началом отладки.

string

string.TemplateШаблоны регулярных выражений теперь можно выборочно изменять для заполнителей с фигурными скобками и заполнителей без фигурных скобок отдельно. (Предоставлено Барри Варшавойbpo-1198569. )

unittest.mock

sentinelСвойства теперь сохраняют свою индивидуальность, когда ониcopiedилиpickledВремя. (Предоставил Сергей Сторчакаbpo-20804. )

xmlrpc.server

xmlrpc.server.SimpleXMLRPCDispatcherизregister_function()и его подклассы могут использоваться как декораторы. (Предоставил Сян Чжанbpo-7769. )

unicodedata

ВнутреннийunicodedataБаза данных обновлена ​​и может быть использованаUnicode 10. (Предоставлено Бенджамином Петерсоном.)

urllib.parse

urllib.parse.quote()был обновлен с RFC 2396 до RFC 3986,~Добавляется в набор символов, которые по умолчанию никогда не заключаются в кавычки. (Предоставлено Кристианом Тьюном и Ратнадипом Дебнатом.bpo-16285. )

uu

функцияencode()Теперь может принимать необязательный аргумент ключевого словаbacktick, когда его значение истинно, "0" будет'`'Подставить вместо пробелов. (Предоставил Сян Чжанbpo-30103. )

zipapp

функцияzipapp.create_archive()Теперь может принимать необязательный параметрfilter, чтобы позволить пользователю выбирать, какие файлы следует включить в архив.

оптимизация

  • Добавлено два новых опкода:LOAD_METHODиCALL_METHOD, таким образом избегая создания экземпляра связанного объекта метода для вызова метода, что приведет к ускорению вызова метода на 20%. (Предоставили Юрий Селиванов и ИНАДА Наокиbpo-26110. )
  • При поиске некоторых специальных символов Unicode (например, украинской заглавной "Є") в строке поиск был в 25 раз медленнее, чем другие символы, но теперь в худшем случае только в 3 раза медленнее. (Предоставил Сергей Сторчакаbpo-24821. )
  • Быстрая реализация стандартной библиотеки C теперь может использоваться дляmathвнутри модуляerf()иerfc()функция. (Предоставил Сергей Сторчакаbpo-26121. )
  • из-за использованияos.scandir()функция,os.fwalk()Эффективность функции увеличена в 2 раза. (Предоставил Сергей Сторчакаbpo-25996. )
  • Оптимизирован для соответствия без учета регистра и дляregular expressionsпоиск. Скорость поиска некоторых персонажей увеличена до 20 раз. (Предоставил Сергей Сторчакаbpo-30285. )
  • При более тяжелых нагрузках,selectors.EpollSelector.modify(),selectors.PollSelector.modify()иselectors.DevpollSelector.modify()будет примерно на 10% быстрее, чем раньше. (Предоставлено Джампаоло Родола’bpo-30014. )

Скомпилируйте, сгенерируйте и измените API языка C

  • На платформах, отличных от OSX, UNIX, при сборке_ctypesПолная копия libffi больше не упаковывается для использования при установке модулей. Создавайте прямо сейчас на этих платформах_ctypesТребуется установленная копия libffi. (Предоставлено Закари Уэромbpo-27979. )
  • структураPyMemberDef,PyGetSetDef,PyStructSequence_Field,PyStructSequence_DescиwrapperbaseизnameиdocТеперь тип поляconst char *вместоchar *. (Предоставил Сергей Сторчакаbpo-28761. )
  • PyUnicode_AsUTF8AndSize()иPyUnicode_AsUTF8()Возвращаемый типconst char *вместоchar *. (Предоставил Сергей Сторчакаbpo-28769. )
  • Добавлена ​​функцияPySlice_Unpack()иPySlice_AdjustIndices(). (Предоставил Сергей Сторчакаbpo-27867. )
  • УстаревшийPyOS_AfterFork(), который поддерживает использование новой функцииPyOS_BeforeFork(),PyOS_AfterFork_Parent()иPyOS_AfterFork_Child(). (Предоставлено Антуаном Питруbpo-16500. )
  • Процесс сборки Windows больше не полагается на Subversion для извлечения внешних источников, а вместо этого загружает zip-файлы из Github с помощью скрипта Python. Если в системе не установлен Python 3.6 (через командуpy -3.6), будет использовать NuGet для загрузки 32-разрядной копии Python. (Предоставлено Закари Уэромbpo-30450. )
  • удалено для сборки--without-threadsслужба поддержки. (Предоставлено Антуаном Питруbpo-31370. )

Другие изменения реализации CPython

  • На гусеничной раме, установив новыйf_trace_linesсвойство установлено наFalse, перехватчики трассировки теперь могут отказаться от полученияlineсобытие. (Предоставлено Ником Когланомbpo-31344. )
  • На гусеничной раме, установив новыйf_trace_opcodesсвойство установлено наTrue, перехватчики трассировки теперь могут дополнительно получатьopcodeсобытие. (Предоставлено Ником Когланомbpo-31344. )

Устаревший контент

  • Если не установленоPy_LIMITED_API, или он установлен из0x03050400прибыть0x03060000(исключительно) или не менее0x03060100значение, функция будет объявлена ​​устаревшейPySlice_GetIndicesEx()и замените его макросом. (Предоставил Сергей Сторчакаbpo-27867. )
  • использоватьformat_string()заменитьlocaleустарело в модулеformat(). (Предоставлено Гарвитомbpo-10379. )
  • методMetaPathFinder.find_module()(Зависит отMetaPathFinder.find_spec()альтернатива) и методPathEntryFinder.find_loader()(Зависит отPathEntryFinder.find_spec()замена) устарели в Python 3.4 и теперь будут испускатьDeprecationWarningпредупреждение. (Предоставлено Матиасом Буссоньеbpo-29576. )
  • существуетgettextФильтрация сложных значений с использованием нецелочисленных значений в , устарела и больше не будет работать. (Предоставил Сергей Сторчакаbpo-28692. )
  • macpathМодуль устарел и будет удален в Python 3.8.

Изменения в API языка C

  • PyThread_start_new_thread()иPyThread_get_thread_ident()тип возвращаемого результата иPyThreadState_SetAsyncExc()Средний параметрidтип изlongстатьunsigned long. (Предоставил Сергей Сторчакаbpo-6532. )
  • еслиPyUnicode_AsWideCharString()Второй аргументNULLиwchar_t*Строка содержит нулевой символ, что приводит кValueErrorошибка. (Предоставил Сергей Сторчакаbpo-30708. )

Только платформа Windows

  • Средство запуска Python (py.exe) принимает 32- и 64-разрядные спецификаторы без указания дополнительной версии. такpy -3-32иpy -3-64также сpy -3.7-32работает так же хорошо и теперь принимает -m-64 и -m.n-64 для принудительного использования 64-битного Python, даже если используется 32-битный. Если указанная версия недоступна, py.exe завершится с ошибкой. (Предоставлено Стивом Барнсомbpo-30291. )
  • Средство запуска можно запустить с помощью команды «py -0», чтобы создать список установленных версий Python,Те, что отмечены звездочкой, по умолчанию, запуск "py -0p" будет включать путь установки. Также печатает, если py запускается с несоответствующим спецификатором версиисокращенная формасписок доступных спецификаторов. (Предоставлено Стивом Барнсомbpo-30362. )

удаленный

Удаленные API и функции

  • в настоящее время используетre.sub()в шаблоне замены,'\'а неизвестный escape-символ, состоящий из буквы ASCII, устарел в Python 3.5 и теперь вызывает ошибку.
  • удаленныйtarfile.TarFile.add()аргументы вexclude. Он устарел в Python 2.7 и 3.2 в пользу использования аргументов.filter.
  • ntpathв модулеsplitunc()Эта функция устарела в Python 3.1 и теперь удалена. использоватьsplitdrive()функция вместо этого.
  • collections.namedtuple()больше не поддерживаетсяverboseпараметры и_sourceСвойство, используемое для отображения исходного кода, сгенерированного для именованного класса кортежа. Это часть оптимизированного дизайна для увеличения скорости создания классов. (Предоставлено Йелле Зейлстрой и дополнено ИНАДА Наоки, Сергеем Сторчакой и Рэймондом Хеттингером.bpo-28638. )
  • функцияbool(),float(),list()иtuple()Аргументы ключевых слов больше не используются.int()Первый аргумент теперь может быть передан только как позиционный аргумент.
  • Удалено ранее устаревшее в Python 2.4.plistlibклассы в модуляхPlist,Dictи_InternalDict. функцияreadPlist()иreadPlistFromBytes()Значение типа словаря в возвращаемом результате теперь является стандартным типом словаря. Вы больше не можете использовать доступ к атрибутам для доступа к элементам в этих словарях.

Портирован на Python 3.7

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

Изменения в API Python

  • еслиpathэто строка,pkgutil.walk_packages()Теперь вызывает ValueError вместо возврата пустого списка. (Предоставил Саньям Куранаbpo-24744. )
  • string.Formatter.format()Аргумент строки формата теперьpositional-only, передача его в качестве аргумента ключевого слова устарела в Python 3.5. (Предоставил Сергей Сторчакаbpo-29193. )
  • http.cookies.Morselсвойства классаkey,valueиcoded_valueтеперь доступны только для чтения, присвоение им значений устарело в Python 3.5, необходимо использоватьset()способ их установки. (Предоставил Сергей Сторчакаbpo-29192. )
  • Module,FunctionDef,AsyncFunctionDefиClassDefУзлы AST теперь имеют новыйdocstringполя, первое объявление самих себя больше не рассматривается как строка документации. Объекты кода для классов и модулейco_firstlinenoиco_lnotabбудут затронуты этим изменением. (Предоставили ИНАДА Наоки и Юджин Тодерbpo-29463. )
  • os.makedirs()параметрыmodeБольше не влияет на биты прав доступа к файлам вновь созданных промежуточных каталогов. Чтобы установить их биты прав доступа к файлам, вы можете вызватьmakedirs()Установите umask раньше. (Предоставил Сергей Сторчакаbpo-19930. )
  • в настоящее времяstruct.Struct.formatТипstrвместоbytes. (Предоставлено Виктором Стиннеромbpo-21071. )
  • так какsocketВнутренние изменения в модулях, которые вы не сможете передать в более старых версиях Python.socket.fromshare()Создаватьshare()-ed (общий) интерфейс.
  • datetime.timedeltaизreprИзменено, чтобы включить аргументы ключевого слова в вывод. (Предоставлено Уткаршем Упадхьяемbpo-30302. )

Изменения в байт-коде CPython

  • Добавлено два новых опкода:LOAD_METHODиCALL_METHOD. (Предоставили Юрий Селиванов и ИНАДА Наокиbpo-26110. )

Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,React,внешний интерфейс,задняя часть,продукт,дизайнЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.