Python 3.7 - Tutte le Novità | Programmare in Python

Python 3.7 - Tutte le Novità

Pubblicato il 29 Giugno 2018

Ci siamo! Finalmente, ci siamo! È di nuovo tempo di far festa! 
Python 3.7, la nuovissima Major Release di Python, è appena stata rilasciata in versione stabile, e porta con se tantissime novità interessanti ed ottimizzazioni!

In questo articolo faremo una breve analisi di quelle che sono le differenze fondamentali rispetto alla versione precedente 3.6, e vi lascerò inoltre tutti i link ufficiali per permettervi di approfondire quanto più desiderate ciascun singolo aspetto. Direi di iniziare anzitutto da quelle migliorie che faranno piacere proprio a tutti, mi riferisco chiaramente alle ottimizzazioni!


UN NOTEVOLE INCREMENTO DI VELOCITÀ

  • Lo startup time di Python è stato ridotto del 10% su Linux, e fino al 30% su macOS
  • Le chiamate ai metodi vedono un incremento di velocità del 20% rispetto alle versioni precedenti
  • sorted() e list.sort() sono ora tra il 40% e il 75% più veloci per i casi comuni
  • Altri miglioramenti sensibili in termini di velocità riguardano le Regular Expressions e funzionalità di navigazione come os.fwalk() e shutil.rmtree(), grazie all'impiego di os.scandir() 


IN FASE DI SVILUPPO

Uno dei motivi per cui è così piacevole lavorare con Python, è che è evidente quanto questo linguaggio venga sviluppato e migliorato con in mente le esigenze dei programmatori.
Python 3.7 vede l'introduzione di nuove opzioni da usare con -X, che per chi non lo sapesse, già permetteva di ottenere informazioni di natura tecnica dettagliate relative all'esecuzione del codice.
Diamo uno sguardo alle nuove opzioni disponibili:

  • python3.7 -X utf8 script.py - - abilita la modalità di codifica UTF-8 per il testo a prescindere dalle impostazioni di sistema
  • python3.7 -X dev script.py - - abilita la "development mode" di CPython
  • python3.7 -X importtime script.py - - questa opzione ci restituirà una tabella col tempo necessario ad effettuare gli import nello script che stiamo analizzando, espresso in microsecondi 

L'introduzione della nuova funzione built-in breakpoint() rende l'utilizzo del Python Debugger più semplice, intuitivo e personalizzabile.


DATA CLASSES

Il nuovo modulo dataclass è uno dei pezzi forti di questa nuova release, sopratutto per chi si trova frequentemente a scrivere codice utilizzando la programmazione a oggetti.
Lo scopo di questo modulo è migliorare il processo di definizione di classi da parte dell'utente, tramite l'impiego del decoratore @dataclass e di funzioni che generano parte del codice più comune in maniera automatica, per noi. È il caso ad esempio del metodo 'costruttore' __init__() e di altri dunder methods come __repr__(), __eq__() e __hash__(), che vengono quindi in questo modo creati automaticamente da Python per noi.
Per dettagli aggiuntivi ed esempi date uno sguardo alla documentazione ufficiale su dataclasses 


DIZIONARI ORDINATI

In Python 3.6 abbiamo visto come una nuova implementazione del tipo di dato dizionaro ne avesse mutato in parte la loro natura, passando da tipi di dato non ordinato a tipi di dato invece ordinato. Ciò significa che a differenza di quanto avveniva in versioni precedenti come Python 3.5, grazie a questa nuova implementazione l'ordine di inserimento dei vari elementi nel dizionario viene preservato per gli accessi futuri.
La novità in Python 3.7 è che adesso questa caratteristica è diventata, come annunciato a dicembre dello scorso anno, parte delle specifiche del linguaggio stesso, garantendone quindi la continuità per tutti i progetti futuri che vengano scritti a partire da questa nuova versione.


PRECISI AL NANOSECONDO

Con lo scopo di incrementarne la precisione per compiti in cui l'accuratezza è vitale, sono state aggiunte 6 nuove funzioni al modulo time.
Queste sei nuovi funzioni sono sostanzialmente delle varianti di funzioni già esistenti nel modulo, che restituiscono un valore in nanosecondi attraverso l'uso di un intero:

Le misurazioni effettuate ci mostrano come su Linux e Windows, time.time_ns() risulta fino a 3 volte migliore rispetto a time.time()


MIGLIORATO IL SISTEMA DI ANNOTATIONS E TYPE HINTS

Le migliorie apportate per questo punto riguardano anche stavolta, sopratutto versatilità e velocità!


Queste sono a mio avviso le migliorie e le novità più rilevanti che sono state introdotte in questa nuovissima versione.

Per un elenco completo date uno sguardo al post di presentazione ufficiale: What’s New In Python 3.7



Come di consueto, potete trovare il pacchetto di installazione di Python 3.7 per tutte le versioni di sistema supportate all'indirizzo https://www.python.org/downloads/ 

Ci tengo però a fare una piccola precisazione a livello cautelare, utile sopra tutto a chi ha poca esperienza col linguaggio: evitate di forzare un aggiornamento di sistema alla nuova versione! Alcuni sistemi operativi e componenti fanno affidamento su specifiche versioni di Python per il loro corretto funzionamento: un aggiornamento forzato fuori tempo porterebbe quasi sicuramente a malfunzionamenti!
Se volete testare Python 3.7 potete comunque farlo: seguite le istruzioni riportate nel file README del pacchetto che potete scaricare dal sito ufficiale, o in alternativa date uno sguardo a strumenti specifici come pyenv.

È giusto segnalare che oltre a Python 3.7 è uscita anche una nuova Manintanence Release di Python 3.6, che giunge ora alla v3.6.6


Un sentito grazie va a tutta la community di sviluppatori e alla 
Python Software Foundation, per questo nuovo fantastico regalo che dimostra come sia giunto ormai il tempo di passare -una volta per tutte- a Python 3.x! Molti sviluppatori si trovano ancora a lavorare con Python 2.x, e la faccenda è ormai tanto controversa che ne sono nate una valanga di memes.
Vi ricordo però che Python 2.x ha ormai le ore contate...