- Оригинальный адрес:Что нового в Python 3.7
- Оригинальный автор:docs.python.org/
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:winjeysong
- Корректор:LynnShaw
Что нового в 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 все еще активны при инициализации основного интерпретатора.
Смотрите также:
- Теперь аргументы передаются какой-то функции (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. ) - В настоящее время нет.
- Добавлено два новых опкода:
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. ) - На платформах, отличных от 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. ) - На гусеничной раме, установив новый
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. -
PyThread_start_new_thread()иPyThread_get_thread_ident()тип возвращаемого результата иPyThreadState_SetAsyncExc()Средний параметрidтип изlongстатьunsigned long. (Предоставил Сергей Сторчакаbpo-6532. ) - если
PyUnicode_AsWideCharString()Второй аргументNULLиwchar_t*Строка содержит нулевой символ, что приводит кValueErrorошибка. (Предоставил Сергей Сторчакаbpo-30708. ) - Средство запуска 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. )
- в настоящее время использует
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()Значение типа словаря в возвращаемом результате теперь является стандартным типом словаря. Вы больше не можете использовать доступ к атрибутам для доступа к элементам в этих словарях. - если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. ) - Добавлено два новых опкода:
LOAD_METHODиCALL_METHOD. (Предоставили Юрий Селиванов и ИНАДА Наокиbpo-26110. )
PEP 538— Принудительное преобразование устаревшей кодировки локализации C в кодировку на основе UTF-8.
PEP был написан и реализован Ником Когланом.
Дополнительные языковые обновления
новый модуль
улучшенный модуль
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, чтобы позволить пользователю выбирать, какие файлы следует включить в архив.
оптимизация
Скомпилируйте, сгенерируйте и измените API языка C
Другие изменения реализации CPython
Устаревший контент
Изменения в API языка C
Только платформа Windows
удаленный
Удаленные API и функции
Портирован на Python 3.7
В этом разделе перечислены некоторые изменения, описанные ранее, а также некоторые другие исправления ошибок, поэтому вам может потребоваться внести изменения в свой код.
Изменения в API Python
Изменения в байт-коде CPython
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,React,внешний интерфейс,задняя часть,продукт,дизайнЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.