Najciekawsze nowości:
- Wyrażenie przypisujące:
Nowy operator := pozwala na przypisywanie wartości do zmiennych wewnątrz wyrażeń. Na przykład:
if (n := len(a)) > 10:
print(f"Lista jest zbyt długa ({n} elementów, oczekiwano <= 10)") - Argumenty tylko pozycyjne:
Teraz można określić, które parametry funkcji można przekazywać za pomocą składni argumentów nazwanych, a które nie. Przykład:
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łąd, `b` nie może być argumentem nazwanym
f(10, 20, 30, 40, 50, f=60) # błąd, `e` musi być argumentem nazwanymTa zmiana daje programistom sposób na ochronę użytkowników ich API przed zmianami w nazwach argumentów funkcji.
- Wsparcie dla f-stringów = dla auto-dokumentujących wyrażeń i debugowania:
Dodano cukier do uproszczenia komunikatów debugujących/logujących.
n = 42
print(f'Witaj świecie {n=}.')
# напечатает "Hello world n=42." - Naprawiono słowo kluczowe continue w bloku finally (wcześniej nie działało).
Inne:
- Można jawnie określić ścieżkę do cache'u bajtkodu zamiast domyślnego __pycache__.
- Debug i Release używają tego samego ABI.
Źródło: linux.org.ru
