Python 3.9

Python 3.9.0 (finale) è stato rilasciato il 5 ottobre 2020. Le funzionalità della 3.9 sono definite nel PEP 596 e una descrizione dettagliata delle modifiche è disponibile in What’s New in Python 3.9

Funzionalità

Stato

PEP 573

Accesso rapido allo stato del modulo dai metodi dei tipi delle estensioni C

Non rilevante

PEP 584

Operatori di unione aggiunti ai dict

Completo [1]

PEP 585

Type hinting dei generici nelle collezioni standard

PEP 593

Annotazioni flessibili di funzioni e variabili

PEP 602

CPython adotta un ciclo di rilascio annuale. Invece che annuale, si punta a un ciclo di rilascio bimestrale

Non rilevante

PEP 614

Restrizioni grammaticali allentate sui decoratori

PEP 615

Il database dei fusi orari IANA è ora presente nella libreria standard nel modulo zoneinfo

PEP 616

Metodi delle stringhe per rimuovere prefissi e suffissi

PEP 617

CPython usa ora un nuovo parser basato su PEG

Non rilevante

Altre modifiche al linguaggio:

__import__() solleva ora ImportError anziché ValueError

Completo

Python ottiene ora il percorso assoluto del nome del file di script specificato sulla riga di comando (es: python3 script.py): l’attributo __file__ del modulo __main__ è diventato un percorso assoluto, anziché relativo

Per impostazione predefinita, per ottenere le migliori prestazioni, l’argomento errors viene controllato solo al primo errore di codifica/decodifica e l’argomento encoding viene talvolta ignorato per le stringhe vuote

«».replace(«», s, n) restituisce ora s anziché una stringa vuota per ogni n diverso da zero. È ora coerente con «».replace(«», s)

Qualsiasi espressione valida può ora essere usata come decoratore. In precedenza, la grammatica era molto più restrittiva

L’esecuzione parallela di aclose() / asend() / athrow() è ora vietata e ag_running riflette ora lo stato di esecuzione effettivo del generatore asincrono

Gli errori imprevisti nella chiamata del metodo __iter__ non vengono più mascherati da TypeError nell’operatore in e nelle funzioni contains(), indexOf() e countOf() del modulo operator

Le espressioni lambda non racchiuse tra parentesi non possono più essere la parte espressione di una clausola if nelle comprehension e nelle espressioni generatore

Modifiche ai moduli integrati:

asyncio

A causa di significativi problemi di sicurezza, il parametro reuse_address di asyncio.loop.create_datagram_endpoint() non è più supportato

Aggiunta una nuova coroutine shutdown_default_executor() che pianifica lo spegnimento dell’executor predefinito attendendo che il ThreadPoolExecutor completi la chiusura. Inoltre, asyncio.run() è stata aggiornata per usare la nuova coroutine.

Aggiunta asyncio.PidfdChildWatcher, un’implementazione di child watcher specifica per Linux che esegue il polling dei descrittori di file dei processi

aggiunta una nuova coroutine asyncio.to_thread()

Quando si annulla la task a causa di un timeout, asyncio.wait_for() attende ora che l’annullamento sia completo anche nel caso in cui il timeout sia <= 0, come avviene con i timeout positivi

asyncio solleva ora TyperError quando si chiamano metodi incompatibili con un socket ssl.SSLSocket

gc

La garbage collection non si blocca sugli oggetti resuscitati

Aggiunta una nuova funzione gc.is_finalized() per verificare se un oggetto è stato finalizzato dal garbage collector

math

Estesa la funzione math.gcd() per gestire più argomenti. In precedenza supportava solo due argomenti

Aggiunta math.lcm(): restituisce il minimo comune multiplo degli argomenti specificati

Aggiunta math.nextafter(): restituisce il successivo valore in virgola mobile dopo x in direzione di y

Aggiunta math.ulp(): restituisce il valore del bit meno significativo di un float

os

Esposte le funzioni os.pidfd_open() e os.P_PIDFD specifiche per Linux

La funzione os.unsetenv() è ora disponibile anche su Windows

Completo

Le funzioni os.putenv() e os.unsetenv() sono ora sempre disponibili

Completo

Aggiunta la funzione os.waitstatus_to_exitcode(): converte uno stato di attesa in un codice di uscita

random

Aggiunto un nuovo metodo random.Random.randbytes: genera byte casuali

sys

Aggiunto un nuovo attributo sys.platlibdir: nome della directory delle librerie specifica della piattaforma

In precedenza, sys.stderr era con buffering a blocchi quando non interattivo. Ora stderr per impostazione predefinita usa sempre il buffering a riga

Note