Наиболее интересные новшества:
- Assignment expression
Новый оператор := позволяет присваивать значения переменным внутри выражений. Например:
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)" - Positional-only parameters
Теперь можно указать, какие параметры функций можно передавать через синтаксис keywords, а какие нет. Пример:
def f(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 cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument
Это изменение дает разработчикам способ обезопасить пользователей своих API от изменений в названии аргументов функций. - f-strings support = for self-documenting expressions and debugging
Добавлен сахар для упрощения debug/log сообщений.
n = 42
print(f'Hello world {n=}.')
# prints Hello world n=42. - Исправлено ключевое слово continue в блоке finally (раньше оно не работало).
Прочее:
- Можно явно указать путь к кэшу байткода вместо дефолтного __pycache__.
- Debug и Release сборки используют один и тот же ABI