- Оригинальный адрес:Что нового в 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,внешний интерфейс,задняя часть,продукт,дизайнЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.