Le novità più interessanti:
- Espressione del compito:
Il nuovo := operatore consente di assegnare valori alle variabili all'interno delle espressioni. Per esempio:
se (n := len(a)) > 10:
print(f"L'elenco è troppo lungo ({n} elementi, previsti <= 10)") - Argomenti solo posizionali:
È ora possibile specificare quali parametri della funzione possono essere passati attraverso la sintassi dell'argomento denominato e quali no. Esempio:
def f(a, b, /, c, d, *, e, f):
stampa(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) # errore, `b` non può essere un argomento con nome
f(10, 20, 30, 40, 50, f=60) # errore, `e` deve essere un argomento con nomeQuesta modifica offre agli sviluppatori un modo per proteggere gli utenti delle loro API dalle modifiche ai nomi degli argomenti delle funzioni.
- Supporto f-strings = per espressioni autodocumentanti e debug:
Aggiunto zucchero per semplificare i messaggi di debug/logging.
n = 42
print(f'Ciao mondo {n=}.')
# stamperà "Ciao mondo n=42." - Corretta la parola chiave continue nel blocco finalmente (prima non funzionava).
Altro:
- È possibile specificare esplicitamente il percorso della cache del bytecode anziché quello predefinito __pycache__.
- Le build di debug e di rilascio utilizzano la stessa ABI.
Fonte: linux.org.ru