Najciekawsze innowacje:
- Wyrażenie przypisania:
Nowy operator := umożliwia przypisanie wartości zmiennym w ramach wyrażeń. Na przykład:
if (n := len(a)) > 10:
print(f"Lista jest za długa ({n} elementów, oczekiwano <= 10)") - Argumenty tylko pozycyjne:
Możesz teraz określić, które parametry funkcji mogą być przekazywane za pomocą składni nazwanych argumentów, 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ć nazwanym argumentem
f(10, 20, 30, 40, 50, f=60) # błąd, `e` musi być nazwanym argumentemTa zmiana umożliwia programistom ochronę użytkowników interfejsów API przed zmianami w nazwach argumentów funkcji.
- Obsługa f-strings = dla wyrażeń samodokumentujących i debugowania:
Dodano cukier, aby uprościć komunikaty debugowania/rejestrowania.
n = 42
print(f'Witaj, świecie {n=}.')
# wypisze „Witaj świecie n=42.” - Naprawiono słowo kluczowecontinue w bloku Final (wcześniej nie działało).
Inne:
- Możesz jawnie określić ścieżkę do pamięci podręcznej kodu bajtowego zamiast domyślnego __pycache__.
- Kompilacje debugowania i wydawania korzystają z tego samego ABI.
Źródło: linux.org.ru