Python 3.8

Python 3.8.0 (finale) è stato rilasciato il 14 ottobre 2019. Le funzionalità della 3.8 sono definite nel PEP 569 e una descrizione dettagliata delle modifiche è disponibile in What’s New in Python 3.8.

Funzionalità

Stato

PEP 570

Argomenti solo posizionali

PEP 572

Espressioni di assegnamento

Completo

PEP 574

Protocollo pickle 5 con dati out-of-band

PEP 578

Hook di audit a runtime

PEP 587

Configurazione dell’inizializzazione di Python

PEP 590

Vectorcall: un protocollo di chiamata veloce per CPython

Varie

Le f-string supportano = per espressioni autodocumentanti e per il debug

Completo

Altre modifiche al linguaggio:

Un’istruzione continue non era ammessa nella clausola finally a causa di un problema di implementazione. In Python 3.8 questa restrizione è stata rimossa

Completo

I tipi bool, int e fractions.Fraction hanno ora un metodo as_integer_ratio() come quello presente in float e decimal.Decimal

I costruttori di int, float e complex useranno ora il metodo speciale __index__(), se disponibile e se il metodo corrispondente __int__(), __float__() o __complex__() non è disponibile

Aggiunto il supporto per le sequenze di escape N{name} nelle espressioni regolari

I dict e le dictview sono ora iterabili nell’ordine inverso di inserimento usando reversed()

La sintassi consentita per i nomi keyword nelle chiamate di funzione è stata ulteriormente ristretta. In particolare, f((keyword)=arg) non è più ammesso

Lo spacchettamento generalizzato di iterabili nelle istruzioni yield e return non richiede più le parentesi di racchiusura

Quando manca una virgola in codice come [(10, 20) (30, 40)], il compilatore mostra un SyntaxWarning con un suggerimento utile

Le operazioni aritmetiche tra sottoclassi di datetime.date o datetime.datetime e oggetti datetime.timedelta restituiscono ora un’istanza della sottoclasse, anziché della classe base

Quando l’interprete Python viene interrotto da Ctrl-C (SIGINT) e l’eccezione KeyboardInterrupt risultante non viene catturata, il processo Python esce ora tramite un segnale SIGINT o con il codice di uscita corretto, in modo che il processo chiamante possa rilevare che è terminato a causa di un Ctrl-C

Alcuni stili di programmazione avanzati richiedono l’aggiornamento dell’oggetto types.CodeType di una funzione esistente

Per gli interi, la forma a tre argomenti della funzione pow() consente ora che l’esponente sia negativo nel caso in cui la base sia coprima con il modulo

Le dict comprehension sono state allineate ai letterali dict, in modo che la chiave venga calcolata per prima e il valore per secondo

Il metodo object.__reduce__() può ora restituire una tupla di lunghezza compresa tra due e sei elementi

Modifiche ai moduli integrati:

asyncio

asyncio.run() è passata dall’API provvisoria a quella stabile

Completo

L’esecuzione di python -m asyncio avvia un REPL nativamente asincrono

L’eccezione asyncio.CancelledError eredita ora da BaseException anziché da Exception e non eredita più da concurrent.futures.CancelledError

Completo

Aggiunta asyncio.Task.get_coro() per ottenere la coroutine incapsulata all’interno di un asyncio.Task

Le task asyncio possono ora essere nominate, sia passando l’argomento keyword name a asyncio.create_task() o al metodo create_task() dell’event loop, sia chiamando il metodo set_name() sull’oggetto task

Aggiunto il supporto per Happy Eyeballs a asyncio.loop.create_connection(). Per specificarne il comportamento sono stati aggiunti due nuovi parametri: happy_eyeballs_delay e interleave.

gc

get_objects() può ora ricevere un parametro generation opzionale che indica una generazione da cui ottenere gli oggetti. (Si noti, tuttavia, che sebbene gc sia integrato, get_objects() non è implementato in MicroPython)

math

Aggiunta la nuova funzione math.dist() per calcolare la distanza euclidea tra due punti

Estesa la funzione math.hypot() per gestire più dimensioni

Aggiunta la nuova funzione math.prod(), analoga a sum(), che restituisce il prodotto di un valore «start» (predefinito: 1) per un iterabile di numeri

Aggiunte due nuove funzioni combinatorie math.perm() e math.comb()

Aggiunta una nuova funzione math.isqrt() per calcolare radici quadrate intere precise senza conversione in virgola mobile

La funzione math.factorial() non accetta più argomenti che non siano di tipo int

Completo

sys

Aggiunta la nuova funzione sys.unraisablehook() che può essere sovrascritta per controllare come vengono gestite le «unraisable exception»