Най-интерсните нововъведения:
- Израз за присвояване:
Новият оператор := позволява присвояване на стойности на променливи в рамките на изрази. Например:
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
