Python 3.9¶
Python 3.9.0 (фінальна версія) був випущений 5 жовтня 2020 року. Можливості версії 3.9 визначено в PEP 596, а детальний опис змін можна знайти в What’s New in Python 3.9
Можливості |
Статус |
|
Швидкий доступ до стану модуля з методів типів розширень C |
Не актуально |
|
Оператори об’єднання додано до dict |
Реалізовано [1] |
|
Підказки типів для узагальнень у стандартних колекціях |
||
Гнучкі анотації функцій та змінних |
||
CPython переходить на щорічний цикл випуску. Замість щорічного, цільовий цикл — два місяці |
Не актуально |
|
Пом’якшені граматичні обмеження щодо декораторів |
||
База даних часових поясів IANA тепер присутня в стандартній бібліотеці в модулі zoneinfo |
||
Методи рядків для видалення префіксів та суфіксів |
||
CPython тепер використовує новий аналізатор на основі PEG |
Не актуально |
Інші зміни мови:
__import__() тепер генерує ImportError замість ValueError |
Реалізовано |
Python тепер отримує абсолютний шлях до імені файлу скрипта, вказаного в командному рядку (наприклад: python3 script.py): атрибут __file__ модуля __main__ тепер є абсолютним шляхом, а не відносним |
|
За замовчуванням, для найкращої продуктивності, аргумент errors перевіряється лише при першій помилці кодування/декодування, а аргумент encoding іноді ігнорується для порожніх рядків |
|
«».replace(«», s, n) тепер повертає s замість порожнього рядка для всіх ненульових n. Тепер це узгоджено з «».replace(«», s) |
|
Тепер будь-який допустимий вираз може використовуватися як декоратор. Раніше граматика була значно більш обмеженою |
|
Паралельний запуск aclose() / asend() / athrow() тепер заборонено, а ag_running тепер відображає фактичний статус роботи асинхронного генератора |
|
Неочікувані помилки під час виклику методу __iter__ більше не маскуються TypeError в операторі in та функціях contains(), indexOf() та countOf() модуля operator |
|
Лямбда-вирази без дужок більше не можуть бути виразом у частині if у включеннях та генераторних виразах |
Зміни у вбудованих модулях:
Через серйозні проблеми безпеки параметр reuse_address функції asyncio.loop.create_datagram_endpoint() більше не підтримується |
|
Додано нову корутину shutdown_default_executor(), яка планує завершення роботи виконавця за замовчуванням, очікуючи закриття ThreadPoolExecutor. Також оновлено asyncio.run() для використання нової корутини. |
|
Додано asyncio.PidfdChildWatcher — специфічну для Linux реалізацію спостерігача дочірніх процесів, що опитує файлові дескриптори процесів |
|
Додано нову coroutine asyncio.to_thread() |
|
При скасуванні завдання через тайм-аут, asyncio.wait_for() тепер буде чекати завершення скасування також у випадку, коли тайм-аут <= 0, як і при позитивних тайм-аутах |
|
asyncio тепер генерує TyperError при виклику несумісних методів з сокетом ssl.SSLSocket |
|
Збирання сміття більше не блокується на відроджених об’єктах |
|
Додано нову функцію gc.is_finalized() для перевірки, чи завершив збирач сміття обробку об’єкта |
|
Розширено функцію math.gcd() для підтримки кількох аргументів. Раніше вона підтримувала лише два аргументи |
|
Додано math.lcm(): повертає найменше спільне кратне зазначених аргументів |
|
Додано math.nextafter(): повертає наступне значення з плаваючою точкою після x у напрямку y |
|
Додано math.ulp(): повертає значення молодшого значущого біта числа з плаваючою точкою |
|
Відкрито доступ до специфічних для Linux os.pidfd_open() та os.P_PIDFD |
|
Функція os.unsetenv() тепер доступна і на Windows |
Реалізовано |
Функції os.putenv() та os.unsetenv() тепер завжди доступні |
Реалізовано |
Додано функцію os.waitstatus_to_exitcode(): перетворює статус очікування на код виходу |
|
Додано новий метод random.Random.randbytes: генерує випадкові байти |
|
Додано новий атрибут sys.platlibdir: назва специфічного для платформи каталогу бібліотек |
|
Раніше sys.stderr буферизувався блоками при неінтерактивному режимі. Тепер stderr за замовчуванням завжди буферизується по рядках |
|
Примітки