Python 3.5

Di seguito e” riportato un elenco delle PEP finalizzate/accettate per Python 3.5 raggruppate in base al loro impatto su MicroPython.

Estensioni alla sintassi

Stato

PEP 448

Generalizzazioni aggiuntive dell’unpacking

Parziale

PEP 465

Un nuovo operatore di moltiplicazione tra matrici

Completo

PEP 492

Coroutine con sintassi async e await

Completo

Estensioni e modifiche al runtime

PEP 461

Formattazione con % per le stringhe binarie

Completo

PEP 475

Ritentativo delle chiamate di sistema che falliscono con EINTR

Completo

PEP 479

Modifica della gestione di StopIteration all’interno dei generatori

Completo

Modifiche alla libreria standard

PEP 471

os.scandir()

PEP 485

math.isclose(), una funzione per testare l’uguaglianza approssimata

Completo

Modifiche varie

PEP 441

Migliorato il supporto alle applicazioni zip di Python

PEP 486

Rendere il Python Launcher consapevole degli ambienti virtuali

Non rilevante

PEP 484

Type hint (solo indicativi)

Completo [1]

PEP 488

Eliminazione dei file PYO

Non rilevante

PEP 489

Riprogettazione del caricamento dei moduli di estensione

Altre modifiche al linguaggio:

Aggiunti gli error handler namereplace. Gli error handler backslashreplace ora funzionano con la decodifica e la traduzione.

I docstring delle property sono ora scrivibili. Cio” e” particolarmente utile per i docstring di collections.namedtuple()

Le importazioni circolari che coinvolgono importazioni relative sono ora supportate.

Nuovi moduli:

Modifiche ai moduli builtin:

collections

La classe OrderedDict e” ora implementata in C, il che la rende da 4 a 100 volte piu” veloce.

Le viste OrderedDict.items() , OrderedDict.keys() , OrderedDict.values() ora supportano l’iterazione con reversed().

The deque class now defines index(), insert(), and copy(), and supports the + and * operators.

I docstring prodotti da namedtuple() possono ora essere aggiornati.

La classe UserString ora implementa i metodi __getnewargs__(), __rmod__(), casefold(), format_map(), isprintable() e maketrans() per corrispondere ai metodi corrispondenti di str.

heapq

Il confronto degli elementi in merge() puo” ora essere personalizzato passando una funzione key in un nuovo argomento keyword opzionale key, e un nuovo argomento keyword opzionale reverse puo” essere usato per invertire il confronto degli elementi

io

Un nuovo metodo BufferedIOBase.readinto1(), che utilizza al massimo una chiamata ai metodi RawIOBase.read() o RawIOBase.readinto() del raw stream sottostante

json

Il decoder JSON ora solleva JSONDecodeError invece di ValueError per fornire migliori informazioni di contesto sull’errore.

math

Due nuove costanti sono state aggiunte al modulo math: inf e nan.

Completo

Una nuova funzione isclose() fornisce un modo per testare l’uguaglianza approssimata.

E” stata aggiunta una nuova funzione gcd(). La funzione fractions.gcd() e” ora deprecata.

os

E” stata aggiunta la nuova funzione scandir() che restituisce un iteratore di oggetti DirEntry.

La funzione urandom() ora utilizza la syscall getrandom() su Linux 3.17 o successivo, e getentropy() su OpenBSD 5.6 e successivo, eliminando la necessita” di usare /dev/urandom ed evitando errori dovuti al potenziale esaurimento dei descrittori di file.

Le nuove funzioni get_blocking() e set_blocking() consentono di ottenere e impostare la modalita” bloccante di un descrittore di file (O_NONBLOCK.)

C’e” una nuova funzione os.path.commonpath() che restituisce il sotto-percorso comune piu” lungo di ciascun pathname passato

re

I riferimenti e i riferimenti condizionali a gruppi di lunghezza fissa sono ora consentiti nelle asserzioni lookbehind

Il numero di gruppi di cattura nelle espressioni regolari non e” piu” limitato a 100.

Le funzioni sub() e subn() ora sostituiscono i gruppi non corrispondenti con stringhe vuote invece di sollevare un’eccezione.

Le eccezioni re.error hanno nuovi attributi, msg, pattern, pos, lineno e colno, che forniscono migliori informazioni di contesto sull’errore

socket

Le funzioni con timeout ora usano un clock monotono, invece di un clock di sistema.

Un nuovo metodo socket.sendfile() consente di inviare un file su un socket utilizzando la funzione ad alte prestazioni os.sendfile() su UNIX, con il risultato di upload da 2 a 3 volte piu” veloci rispetto all’uso del semplice socket.send()

Il metodo socket.sendall() non azzera piu” il timeout del socket ogni volta che vengono ricevuti o inviati byte. Il timeout del socket e” ora la durata totale massima per inviare tutti i dati.

L’argomento backlog del metodo socket.listen() e” ora opzionale. Per impostazione predefinita e” impostato a SOMAXCONN o a 128, a seconda di quale sia il minore.

Completo

ssl

Supporto per Memory BIO

Supporto per Application-Layer Protocol Negotiation

C’e” un nuovo metodo SSLSocket.version() per interrogare la versione del protocollo effettivamente in uso.

La classe SSLSocket ora implementa un metodo SSLSocket.sendfile().

Il metodo SSLSocket.send() ora solleva l’eccezione ssl.SSLWantReadError o ssl.SSLWantWriteError su un socket non bloccante se l’operazione si bloccherebbe. In precedenza, restituiva 0.

La funzione cert_time_to_seconds() ora interpreta il tempo in input come UTC e non come ora locale, secondo l’RFC 5280. Inoltre, il valore di ritorno e” sempre un int.

I nuovi metodi SSLObject.shared_ciphers() e SSLSocket.shared_ciphers() restituiscono la lista delle cipher inviate dal client durante l’handshake.

I metodi SSLSocket.do_handshake(), SSLSocket.read(), SSLSocket.shutdown() e SSLSocket.write() della classe SSLSocket non azzerano piu” il timeout del socket ogni volta che vengono ricevuti o inviati byte.

La funzione match_hostname() ora supporta la corrispondenza degli indirizzi IP.

sys

Una nuova funzione set_coroutine_wrapper() consente di impostare un hook globale che verra” chiamato ogni volta che un oggetto coroutine viene creato da una funzione async def. Una corrispondente get_coroutine_wrapper() puo” essere usata per ottenere il wrapper attualmente impostato.

Una nuova funzione is_finalizing() puo” essere usata per verificare se l’interprete Python si sta arrestando.

time

La funzione monotonic() e” ora sempre disponibile

Note