Python 3.8¶
Python 3.8.0 (фінальна версія) був випущений 14 жовтня 2019 року. Можливості версії 3.8 визначено в PEP 569, а детальний опис змін можна знайти в What’s New in Python 3.8.
Можливості | Статус | |
Аргументи лише за позицією | ||
Вирази присвоєння | Реалізовано | |
Протокол pickle 5 із позасмуговими даними | ||
Хуки аудиту часу виконання | ||
Конфігурація ініціалізації Python | ||
Vectorcall: швидкий протокол виклику для CPython | ||
Різне | ||
f-рядки підтримують = для виразів самодокументування та налагодження | Реалізовано | |
Інші зміни мови:
Інструкція continue у блоці finally була заборонена через проблему з реалізацією. У Python 3.8 це обмеження знято | Реалізовано |
Типи bool, int та fractions.Fraction тепер мають метод as_integer_ratio(), як і у float та decimal.Decimal | |
Конструктори int, float та complex тепер використовуватимуть спеціальний метод __index__(), якщо він доступний, а відповідний метод __int__(), __float__() або __complex__() недоступний | |
Додано підтримку екранувань N{name} у регулярних виразах | |
Dict та dictviews тепер ітерабельні у зворотному порядку вставки за допомогою reversed() | |
Синтаксис, дозволений для іменованих аргументів у викликах функцій, було додатково обмежено. Зокрема, f((keyword)=arg) більше не допускається | |
Узагальнений ітерабельний розпакування у виразах yield та return більше не вимагає огортаючих дужок | |
Коли пропущено кому у коді такого виду, як [(10, 20) (30, 40)], компілятор відображає SyntaxWarning із корисною підказкою | |
Арифметичні операції між підкласами datetime.date або datetime.datetime та об’єктами datetime.timedelta тепер повертають екземпляр підкласу, а не базового класу | |
Коли інтерпретатор Python переривається Ctrl-C (SIGINT), а результуюче виключення KeyboardInterrupt не перехоплено, процес Python тепер завершується через сигнал SIGINT або з правильним кодом виходу, щоб процес-ініціатор міг визначити, що він завершився через Ctrl-C | |
Деякі просунуті стилі програмування вимагають оновлення об’єкта types.CodeType для існуючої функції | |
Для цілих чисел, трьохаргументна форма функції pow() тепер дозволяє від’ємний показник степеня, якщо основа взаємно проста з модулем | |
Включення dict синхронізовані з літералами dict так, що ключ обчислюється першим, а значення — другим | |
Метод object.__reduce__() тепер може повертати кортеж від двох до шести елементів |
Зміни у вбудованих модулях:
asyncio.run() перейшов із попередньої до стабільної версії API | Реалізовано |
Запуск python -m asyncio відкриває нативно асинхронний REPL | |
Виключення asyncio.CancelledError тепер успадковується від BaseException, а не від Exception, і більше не успадковується від concurrent.futures.CancelledError | Реалізовано |
Додано asyncio.Task.get_coro() для отримання обгорнутої корутини всередині asyncio.Task | |
Задачі asyncio тепер можна іменувати: або передаючи іменований аргумент name у asyncio.create_task() або методу циклу подій create_task(), або викликаючи метод set_name() на об’єкті задачі | |
Додано підтримку Happy Eyeballs для asyncio.loop.create_connection(). Для вказівки поведінки додано два нові параметри: happy_eyeballs_delay та interleave. | |
get_objects() тепер може приймати необов’язковий параметр generation, що вказує покоління для отримання об’єктів. (Зауважте, що хоча gc є вбудованим, get_objects() не реалізований для MicroPython) | |
Додано нову функцію math.dist() для обчислення евклідової відстані між двома точками | |
Розширено функцію math.hypot() для підтримки кількох вимірів | |
Додано нову функцію math.prod() як аналог sum(), що повертає добуток початкового значення (за замовчуванням: 1) на ітерабельну послідовність чисел | |
Додано дві нові комбінаторні функції math.perm() та math.comb() | |
Додано нову функцію math.isqrt() для обчислення точного цілочисельного квадратного кореня без перетворення на число з плаваючою точкою | |
Функція math.factorial() більше не приймає аргументи, що не є цілочисельними | Реалізовано |
Додано нову функцію sys.unraisablehook(), яку можна замінити для керування обробкою «непідйомних виключень» | |