Найцікавіші нововведення:
- Надає вираз:
Новий оператор := дозволяє надавати значення змінним усередині виразів. Наприклад:
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)") - Positional-тільки аргументи:
Тепер можна вказати, які параметри можна передавати через синтаксис іменованих аргументів, а які ні. Приклад:
def (a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)f(10, 20, 30, d=40, e=50, f=60) # OK
f(10, b=20, c=30, d=40, e=50, f=60) # помилка, `b` не може бути іменованим аргументом
f(10, 20, 30, 40, 50, f=60) # помилка, `e` може бути іменованим аргументомЦя зміна дає розробникам спосіб убезпечити користувачів API від змін у назві аргументів функцій.
- Підтримка f-рядків = для самодокументуючих виразів та налагодження:
Доданий цукор для спрощення налагоджувальних/логіруючих повідомлень.
N = 42
print(f'Hello world {n=}.')
# надрукує "Hello world n=42." - Виправлено ключове слово continue у блоці finally (раніше воно не працювало).
інше:
- Можна явно вказати шлях до кешу байткод замість дефолтного __pycache__.
- Debug і Release складання використовують один і той же ABI.
Джерело: linux.org.ru