Python 3.10: le novità in arrivo


Meridio avatar
Mauro Rotondi

Il prossimo ottobre dovrebbe essere rilasciata la nuova versione di Python, la numero 3.10. Sul sito ufficiale è già possibile ottenere la beta 2, grazie alla quale possiamo apprezzare praticamente tutte le novità introdotte nel linguaggio.

In questo articolo cercheremo di riassumere almeno le più significative.

Messaggi di errore migliorati

Una prima novità introdotta con questa nuova versione riguarda i messaggi di errore. Generalmente, è abbastanza semplice risalire alla causa degli errori dando un’occhiata a quanto viene stampato nella console dall’interprete di Python. Tuttavia, in alcuni casi può non essere semplice identificare la causa in modo immediato.

Per migliorare questo aspetto, sono stati aggiunti alcuni dettagli relativi a casi d’uso comuni, che dovrebbero semplificare la fase di troubleshooting. Ad esempio, viene evidenziato in modo più efficace un dizionario erroneamente non chiuso.

Altri errori comuni che vengono adesso gestiti in maniera più intuitiva riguarda la mancata chiusura delle virgolette che incapsulano una stringa, o l’assena dei due punti (:) alla fine della condizione di un if o dopo la sintassi di un ciclo for. Anche gli errori relativi ad indentazioni errate sono ora segnalati con messaggi più espressivi.

Switch (o Structural Pattern Matching)

Uno dei costrutti che finora è mancato su Python è quello dello switch, presente in altri linguaggi C-like. La nuova versione di Python introduce il cosiddetto Structural Pattern Matching, che di fatto permette di realizzare ciò che più si avvicina ad uno switch, sostituendosi alla necessità di affidarsi ad una lunga serie di if-elif-else. Vediamo un esempio:

def mood_settimanale(giorno):
    match giorno:
        case 'Lunedì':
            return 'Si ricomincia...'
        case 'Giovedì':
            return 'Si avvicina il weekend!'
        case 'Venerdì':
            return 'Ci siamo quasi!'
        case 'Sabato' | 'Domenica':
            return 'Weekend!!!'
        case _:
            return 'Che noia...'
print(mood_settimanale(day='Mercoledì'))
# Che noia...
print(mood_settimanale(day='Giovedì'))
# Si avvicina il weekend!
print(mood_settimanale(day='Sabato'))
# Weekend!!!
print(mood_settimanale(day='Lunedì'))
# Si ricomincia...

Vengono quindi introdotte le parole chiave match e case, con quest’ultima che assume il significato equivalente al default di C nel caso in cui viene seguita dal carattere _.

Operatore Union

Finora, per poter definire una funzione in modo da limitare i parametri a poter assumere valori di uno specifico insieme di tipi, era necessario affidarsi all’operatore Union del modulo typing:

from typing import Union
def square_root(number: Union[int, float]) -> Union[int, float]:
    return number ** 0.5

Con Python 3.10, è introdotta una nuova sintassi che fa uso del carattere |, semplificando la scrittura del codice:

def square_root(number: int | float) -> int | float:
    return number ** 0.5

Migliorati i context manager

Altro miglioramento interessante è quello che riguarda i context manager, che sfruttano la parola chiave with per definire un contesto entro cui limitare la sussistenza di certi oggetti, come gli handler dei file. Con Python 3.10 è introdotta la possibilità di definire un insieme di oggetti, anziché limitarsi ad uno solo di essi, sfruttando la seguente sintassi:

with (
    open('file1.txt', 'r') as f1,
    open('file2.txt', 'r') as f2
):
    content_1 = f1.read()
    content_2 = f2.read()

Altre novità in Python 3.10

Ovviamente ci sono altre novità significative che vedranno la luce con la nuova versione di Python. Per avere una panoramica completa, rimandiamo alla documentazione ufficiale, che dettaglia tutti i miglioramenti introdotti nel linguaggio.

 

Fonte: html.it

Condividi