Python 3.6

Python 3.6 beta 1 è stato rilasciato il 12 settembre 2016 e un riepilogo delle nuove funzionalità è disponibile qui:

Nuove funzionalità di sintassi

Stato

PEP 498

Formattazione letterale delle stringhe

Completo

PEP 515

Trattini bassi nei letterali numerici

Completo

PEP 525

Generatori asincroni

PEP 526

Sintassi per le annotazioni delle variabili (provvisoria)

Completo

PEP 530

Comprehension asincrone

Nuove funzionalità integrate

PEP 468

Preservazione dell’ordine dei kwargs in una funzione

PEP 487

Personalizzazione più semplice della creazione delle classi

Parziale [1]

PEP 520

Preservazione dell’ordine di definizione degli attributi di classe

Modifiche alla libreria standard

PEP 495

Disambiguazione dell’ora locale

PEP 506

Aggiunta di un modulo secrets alla libreria standard

PEP 519

Aggiunta di un protocollo per i percorsi del file system

Aspetti interni di CPython

PEP 509

Aggiunta di una versione privata ai dict

Non implementato

PEP 523

Aggiunta di un’API di valutazione dei frame a CPython

Modifiche per Linux/Windows

PEP 524

Rendere os.urandom() bloccante su Linux (durante l’avvio del sistema)

PEP 528

Modifica della codifica della console di Windows in UTF-8

PEP 529

Modifica della codifica del file system di Windows in UTF-8

Altre modifiche al linguaggio:

Un’istruzione global o nonlocal deve ora apparire testualmente prima del primo utilizzo del nome interessato nello stesso ambito. In precedenza ciò generava un SyntaxWarning.

È ora possibile impostare un metodo speciale a None per indicare che l’operazione corrispondente non è disponibile. Ad esempio, se una classe imposta __iter__() a None, la classe non è iterabile.

Le lunghe sequenze di righe di traceback ripetute vengono ora abbreviate come [Previous line repeated {count} more times]

L’import ora solleva la nuova eccezione ModuleNotFoundError quando non riesce a trovare un modulo. Il codice che attualmente verifica la presenza di ImportError (in try-except) continuerà a funzionare.

I metodi di classe che si basano su super() senza argomenti funzioneranno ora correttamente quando vengono chiamati dai metodi delle metaclassi durante la creazione della classe.

Modifiche ai moduli integrati:

array

Gli iteratori esauriti di array.array rimarranno ora esauriti anche se l’array iterato viene esteso.

binascii

La funzione b2a_base64() accetta ora un argomento keyword newline opzionale per controllare se il carattere di a capo viene aggiunto al valore restituito

Completo

cmath

È stata aggiunta la nuova costante cmath.tau (τ)

Nuove costanti: cmath.inf e cmath.nan per corrispondere a math.inf e math.nan, e anche cmath.infj e cmath.nanj per corrispondere al formato usato dal repr dei numeri complessi

collections

È stata aggiunta la nuova classe base astratta Collection per rappresentare le classi container iterabili dotate di dimensione

La nuova classe base astratta Reversible rappresenta le classi iterabili che forniscono anche il metodo __reversed__().

La nuova classe base astratta AsyncGenerator rappresenta i generatori asincroni.

La funzione namedtuple() accetta ora un argomento keyword opzionale module che, se specificato, viene usato per l’attributo __module__ della classe named tuple restituita.

Gli argomenti verbose e rename di namedtuple() sono ora accettati solo come keyword.

Le istanze ricorsive di collections.deque possono ora essere serializzate con pickle.

hashlib

Al modulo sono state aggiunte le funzioni di hash BLAKE2. blake2b() e blake2s() sono sempre disponibili e supportano l’intero set di funzionalità di BLAKE2.

Sono state aggiunte le funzioni di hash SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512() e le funzioni di hash SHAKE shake_128() e shake_256().

La funzione di derivazione di chiavi basata su password scrypt() è ora disponibile con OpenSSL 1.1.0 e versioni successive.

json

json.load() e json.loads() supportano ora l’input binario. Il JSON codificato deve essere rappresentato usando UTF-8, UTF-16 o UTF-32.

math

È stata aggiunta la nuova costante math.tau (τ)

Completo

os

Un nuovo metodo close() consente di chiudere esplicitamente un iteratore scandir(). L’iteratore scandir() supporta ora il protocollo del context manager.

Su Linux, os.urandom() ora si blocca fino a quando il pool di entropia urandom del sistema non è inizializzato, per aumentare la sicurezza.

La chiamata di sistema Linux getrandom() (ottiene byte casuali) è ora esposta come nuova funzione os.getrandom().

re

Aggiunto il supporto per gli intervalli di modificatori nelle espressioni regolari. Esempi: “(?i:p)ython” corrisponde a “python” e “Python”, ma non a “PYTHON”; “(?i)g(?-i:v)r” corrisponde a “GvR” e “gvr”, ma non a “GVR”.

È possibile accedere ai gruppi di un oggetto match tramite __getitem__, che equivale a group(). Quindi mo[“name”] equivale ora a mo.group(“name”).

Gli oggetti match supportano ora oggetti di tipo indice come indici di gruppo.

socket

La funzione ioctl() supporta ora il codice di controllo SIO_LOOPBACK_FAST_PATH.

Le costanti di getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC e SO_PASSSEC sono ora supportate.

setsockopt() supporta ora la forma setsockopt(level, optname, None, optlen: int).

Il modulo socket supporta ora la famiglia di indirizzi AF_ALG per interfacciarsi con l’API crypto del kernel Linux. Sono stati aggiunti ALG_, SOL_ALG e sendmsg_afalg().

Sono state aggiunte le nuove costanti Linux TCP_USER_TIMEOUT e TCP_CONGESTION.

ssl

ssl supporta OpenSSL 1.1.0. La versione minima consigliata è 1.0.2.

Il 3DES è stato rimosso dalle suite di cifrari predefinite e sono state aggiunte le suite di cifrari ChaCha20 Poly1305.

SSLContext ha una configurazione predefinita migliore per le opzioni e i cifrari.

Una sessione SSL può essere copiata da una connessione lato client a un’altra con la nuova classe SSLSession. La ripresa della sessione TLS può velocizzare l’handshake iniziale, ridurre la latenza e migliorare le prestazioni.

Il nuovo metodo get_ciphers() può essere usato per ottenere un elenco dei cifrari abilitati in ordine di priorità.

Tutte le costanti e i flag sono stati convertiti in IntEnum e IntFlags.

Sono stati aggiunti protocolli TLS specifici lato server e lato client per SSLContext.

Aggiunto SSLContext.post_handshake_auth per abilitare e ssl.SSLSocket.verify_client_post_handshake() per avviare l’autenticazione post-handshake di TLS 1.3.

struct

supporta ora i float a mezza precisione IEEE 754 tramite lo specificatore di formato “e”.

sys

La nuova funzione getfilesystemencodeerrors() restituisce il nome della modalità di errore usata per convertire tra nomi di file Unicode e nomi di file in byte.

zlib

Le funzioni compress() e decompress() accettano ora argomenti keyword

Note