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 |
|
Argomenti solo posizionali |
||
Espressioni di assegnamento |
Completo |
|
Protocollo pickle 5 con dati out-of-band |
||
Hook di audit a runtime |
||
Configurazione dell’inizializzazione di Python |
||
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.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. |
|
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) |
|
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 |
Aggiunta la nuova funzione sys.unraisablehook() che può essere sovrascritta per controllare come vengono gestite le «unraisable exception» |
|