Наиболее интересные новшества:
- Присваивающее выражение:
Новый оператор := позволяет присваивать значения переменным внутри выражений. Например:
wann (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)") - Positional-only аргументы:
Теперь можно указать, какие параметры функций можно передавать через синтаксис именованных аргументов, а какие нет. Пример:
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` не может быть именованным аргументом
f(10, 20, 30, 40, 50, f=60) # ошибка, `e` обязан быть именованным аргументомЭто изменение дает разработчикам способ обезопасить пользователей своих API от изменений в названии аргументов функций.
- Поддержка f-строками = для самодокументирующих выражений и отладки:
Добавлен сахар для упрощения отладочных/логгирующих сообщений.
n = 42
print(f’Hello world {n=}.’)
# напечатает "Hello world n=42." - Исправлено ключевое слово continue в блоке finally (раньше оно не работало).
Aner:
- Можно явно указать путь к кэшу байткода вместо дефолтного __pycache__.
- Debug и Release сборки используют один и тот же ABI.
Source: linux.org.ru