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 за замовчуванням завжди буферизується по рядках | |
Примітки