Най-интересните нововъведения:
- Присвояващо изразяване:
Новият оператор := позволява да се присвояват стойности на променливи в изрази. Например:
if (n := len(a)) > 10:
print(f"Списъкът е твърде дълъг ({n} елемента, очаквани <= 10)") - Аргументи само по позиция:
Сега може да се уточнява кои параметри на функциите могат да се предават чрез синтакса на именуваните аргументи и кои не. Пример:
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) # ОК
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’Здравей свят {n=}.’)
# напечатает "Hello world n=42." - Коригирано е ключовото слово continue в блока finally (по-рано не работеше).
Други:
- Може да се уточни пътя към кеша на байткода вместо подразбиращия се __pycache__.
- Debug и Release версиите използват един и същ ABI.
Източник: linux.org.ru
