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(), яку можна замінити для керування обробкою «непідйомних виключень» |
|