Релиз Python 3.8
Наиболее интересные новшества:
- Assignment expression
Новый оператор := позволяет присваивать значения переменным внутри выражений. Например:
if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")
- Positional-only parameters
Теперь можно указать, какие параметры функций можно передавать через синтаксис keywords, а какие нет. Пример:
Это изменение дает разработчикам способ обезопасить пользователей своих API от изменений в названии аргументов функций.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
- 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
>>> Подробности