Python 3.6

Python 3.6 beta 1 a fost lansat pe 12 septembrie 2016, iar un rezumat al noilor funcționalități poate fi găsit aici:

Funcționalități noi de sintaxă

Stare

PEP 498

Formatarea literală a șirurilor de caractere

Complet

PEP 515

Caractere de subliniere în literalii numerici

Complet

PEP 525

Generatoare asincrone

PEP 526

Sintaxă pentru adnotările variabilelor (provizoriu)

Complet

PEP 530

Comprehensiuni asincrone

Funcționalități noi încorporate

PEP 468

Păstrarea ordinii argumentelor kwargs într-o funcție

PEP 487

Personalizare mai simplă a creării claselor

Parțial [1]

PEP 520

Păstrarea ordinii de definire a atributelor clasei

Modificări ale bibliotecii standard

PEP 495

Dezambiguizarea orei locale

PEP 506

Adăugarea unui modul Secrets în biblioteca standard

PEP 519

Adăugarea unui protocol pentru căile de sistem de fișiere

Componentele interne CPython

PEP 509

Adăugarea unei versiuni private la dict

Nu se va face

PEP 523

Adăugarea unui API de evaluare a cadrelor în CPython

Modificări Linux/Windows

PEP 524

Blocarea os.urandom() pe Linux (în timpul pornirii sistemului)

PEP 528

Schimbarea codificării consolei Windows în UTF-8

PEP 529

Schimbarea codificării sistemului de fișiere Windows în UTF-8

Alte modificări ale limbajului:

O instrucțiune global sau nonlocal trebuie acum să apară textual înaintea primei utilizări a numelui afectat în același domeniu de vizibilitate. Anterior, acest lucru era un SyntaxWarning.

Acum este posibilă setarea unei metode speciale la None pentru a indica faptul că operația corespunzătoare nu este disponibilă. De exemplu, dacă o clasă setează __iter__() la None, clasa nu este iterabilă.

Secvențele lungi de linii repetate din traceback sunt acum prescurtate ca [Previous line repeated {count} more times]

Importul ridică acum noua excepție ModuleNotFoundError atunci când nu poate găsi un modul. Codul care verifică în prezent ImportError (în try-except) va continua să funcționeze.

Metodele de clasă care se bazează pe super() fără argumente vor funcționa acum corect când sunt apelate din metodele metaclasei în timpul creării clasei.

Modificări ale modulelor încorporate:

array

Iteratorii epuizați ai array.array vor rămâne acum epuizați chiar dacă tabloul iterat este extins.

binascii

Funcția b2a_base64() acceptă acum un argument opțional de tip cuvânt-cheie newline pentru a controla dacă se adaugă caracterul de linie nouă la valoarea returnată

Complet

cmath

A fost adăugată noua constantă cmath.tau (τ)

Constante noi: cmath.inf și cmath.nan pentru a corespunde math.inf și math.nan, precum și cmath.infj și cmath.nanj pentru a corespunde formatului folosit de repr-ul complex

collections

A fost adăugată noua clasă de bază abstractă Collection pentru a reprezenta clasele de containere iterabile cu dimensiune

Noua clasă de bază abstractă Reversible reprezintă clasele iterabile care furnizează și metoda __reversed__().

Noua clasă de bază abstractă AsyncGenerator reprezintă generatoarele asincrone.

Funcția namedtuple() acceptă acum un argument opțional de tip cuvânt-cheie module, care, atunci când este specificat, este folosit pentru atributul __module__ al clasei tuplu cu nume returnate.

Argumentele verbose și rename pentru namedtuple() sunt acum doar de tip cuvânt-cheie.

Instanțele recursive collections.deque pot fi acum serializate cu pickle.

hashlib

Funcțiile de hash BLAKE2 au fost adăugate la modul. blake2b() și blake2s() sunt întotdeauna disponibile și acceptă întregul set de funcționalități al BLAKE2.

Au fost adăugate funcțiile de hash SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512() și funcțiile de hash SHAKE shake_128() și shake_256().

Funcția de derivare a cheilor pe bază de parolă scrypt() este acum disponibilă cu OpenSSL 1.1.0 și versiunile mai noi.

json

json.load() și json.loads() acceptă acum intrare binară. JSON-ul codificat trebuie reprezentat folosind UTF-8, UTF-16 sau UTF-32.

math

A fost adăugată noua constantă math.tau (τ)

Complet

os

O nouă metodă close() permite închiderea explicită a unui iterator scandir(). Iteratorul scandir() acceptă acum protocolul de manager de context.

Pe Linux, os.urandom() se blochează acum până când bazinul de entropie urandom al sistemului este inițializat, pentru a crește securitatea.

Apelul de sistem Linux getrandom() (obținerea de octeți aleatori) este acum expus prin noua funcție os.getrandom().

re

A fost adăugat suportul pentru intervale de modificatori în expresiile regulate. Exemple: «(?i:p)ython» corespunde «python» și «Python», dar nu și «PYTHON»; «(?i)g(?-i:v)r» corespunde «GvR» și «gvr», dar nu și «GVR».

Grupurile obiectelor Match pot fi accesate prin __getitem__, ceea ce este echivalent cu group(). Astfel, mo[«name»] este acum echivalent cu mo.group(«name»).

Obiectele Match acceptă acum obiecte de tip index ca indici de grup.

socket

Funcția ioctl() acceptă acum codul de control SIO_LOOPBACK_FAST_PATH.

Constantele getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC și SO_PASSSEC sunt acum acceptate.

setsockopt() acceptă acum forma setsockopt(level, optname, None, optlen: int).

Modulul socket acceptă acum familia de adrese AF_ALG pentru a interfața cu API-ul de criptografie al nucleului Linux. Au fost adăugate ALG_, SOL_ALG și sendmsg_afalg().

Au fost adăugate noi constante Linux TCP_USER_TIMEOUT și TCP_CONGESTION.

ssl

ssl acceptă OpenSSL 1.1.0. Versiunea minimă recomandată este 1.0.2.

3DES a fost eliminat din suitele de cifruri implicite, iar suitele de cifruri ChaCha20 Poly1305 au fost adăugate.

SSLContext are o configurație implicită mai bună pentru opțiuni și cifruri.

O sesiune SSL poate fi copiată de la o conexiune din partea clientului la alta cu ajutorul noii clase SSLSession. Reluarea sesiunii TLS poate accelera handshake-ul inițial, poate reduce latența și poate îmbunătăți performanța.

Noua metodă get_ciphers() poate fi folosită pentru a obține o listă a cifrurilor activate în ordinea priorității cifrurilor.

Toate constantele și fanioanele au fost convertite în IntEnum și IntFlags.

Au fost adăugate protocoale TLS specifice pentru partea de server și de client pentru SSLContext.

A fost adăugat SSLContext.post_handshake_auth pentru a activa și ssl.SSLSocket.verify_client_post_handshake() pentru a iniția autentificarea post-handshake TLS 1.3.

struct

acceptă acum numerele cu virgulă mobilă IEEE 754 cu jumătate de precizie prin specificatorul de format «e».

sys

Noua funcție getfilesystemencodeerrors() returnează numele modului de eroare folosit pentru a converti între numele de fișiere Unicode și numele de fișiere bytes.

zlib

Funcțiile compress() și decompress() acceptă acum argumente de tip cuvânt-cheie

Note