Python 3.6

Python 3.6 beta 1 izdan je 12. rujna 2016., a sažetak novih značajki može se pronaći ovdje:

Nove sintaktičke značajke

Status

PEP 498

Oblikovanje doslovnih nizova (Literal String Formatting)

Dovršeno

PEP 515

Donje crte u brojčanim literalima

Dovršeno

PEP 525

Asinkroni generatori

PEP 526

Sintaksa za anotacije varijabli (privremeno)

Dovršeno

PEP 530

Asinkrone komprehenzije

Nove ugrađene značajke

PEP 468

Očuvanje redoslijeda kwargs u funkciji

PEP 487

Jednostavnija prilagodba stvaranja klasa

Djelomično [1]

PEP 520

Očuvanje redoslijeda definiranja atributa klase

Promjene standardne biblioteke

PEP 495

Razrješavanje dvosmislenosti lokalnog vremena

PEP 506

Dodavanje modula secrets u standardnu biblioteku

PEP 519

Dodavanje protokola za putanje datotečnog sustava

Interni dijelovi CPythona

PEP 509

Dodavanje privatne verzije u dict

Neće se napraviti

PEP 523

Dodavanje API-ja za evaluaciju okvira (frame) u CPython

Promjene za Linux/Windows

PEP 524

Učiniti os.urandom() blokirajućim na Linuxu (tijekom pokretanja sustava)

PEP 528

Promjena kodiranja Windows konzole na UTF-8

PEP 529

Promjena kodiranja Windows datotečnog sustava na UTF-8

Ostale jezične promjene:

Naredba global ili nonlocal sada se mora tekstualno pojaviti prije prve upotrebe pogođenog imena u istom dosegu. Prije je to bilo SyntaxWarning.

Sada je moguće postaviti posebnu metodu na None kako bi se naznačilo da odgovarajuća operacija nije dostupna. Na primjer, ako klasa postavi __iter__() na None, klasa nije iterabilna.

Duge sekvence ponovljenih redaka praćenja (traceback) sada se skraćuju kao [Previous line repeated {count} more times]

Uvoz sada izaziva novu iznimku ModuleNotFoundError kada ne može pronaći modul. Kod koji trenutno provjerava ImportError (u try-except) i dalje će raditi.

Metode klase koje se oslanjaju na super() bez argumenata sada će ispravno raditi kada se pozivaju iz metoda metaklase tijekom stvaranja klase.

Promjene ugrađenih modula:

array

Iscrpljeni iteratori objekta array.array sada će ostati iscrpljeni čak i ako se iterirani niz proširi.

binascii

Funkcija b2a_base64() sada prihvaća opcionalni ključni argument newline kojim se upravlja hoće li se znak za novi redak dodati povratnoj vrijednosti

Dovršeno

cmath

Dodana je nova konstanta cmath.tau (τ)

Nove konstante: cmath.inf i cmath.nan koje odgovaraju math.inf i math.nan, te također cmath.infj i cmath.nanj koje odgovaraju formatu koji koristi complex repr

collections

Dodana je nova apstraktna bazna klasa Collection za predstavljanje klasa spremnika koji su iterabilni i imaju definiranu veličinu

Nova apstraktna bazna klasa Reversible predstavlja iterabilne klase koje također pružaju metodu __reversed__().

Nova apstraktna bazna klasa AsyncGenerator predstavlja asinkrone generatore.

Funkcija namedtuple() sada prihvaća opcionalni ključni argument module koji se, kada je naveden, koristi za atribut __module__ vraćene klase imenovane n-torke.

Argumenti verbose i rename za namedtuple() sada su isključivo ključne riječi.

Rekurzivne instance collections.deque sada se mogu serijalizirati (pickle).

hashlib

U modul su dodane BLAKE2 hash funkcije. blake2b() i blake2s() uvijek su dostupne i podržavaju cijeli skup značajki BLAKE2.

Dodane su SHA-3 hash funkcije sha3_224(), sha3_256(), sha3_384(), sha3_512() te SHAKE hash funkcije shake_128() i shake_256().

Funkcija za izvođenje ključa na temelju lozinke scrypt() sada je dostupna uz OpenSSL 1.1.0 i novije.

json

json.load() i json.loads() sada podržavaju binarni ulaz. Kodirani JSON treba biti predstavljen pomoću UTF-8, UTF-16 ili UTF-32.

math

Dodana je nova konstanta math.tau (τ)

Dovršeno

os

Nova metoda close() omogućuje eksplicitno zatvaranje iteratora scandir(). Iterator scandir() sada podržava protokol upravitelja konteksta.

Na Linuxu os.urandom() sada blokira dok se entropijski bazen sustava urandom ne inicijalizira radi povećanja sigurnosti.

Linux sistemski poziv getrandom() (dohvat nasumičnih bajtova) sada je izložen kao nova funkcija os.getrandom().

re

Dodana je podrška za raspone modifikatora u regularnim izrazima. Primjeri: ‘(?i:p)ython’ odgovara izrazima ‘python’ i ‘Python’, ali ne i ‘PYTHON’; ‘(?i)g(?-i:v)r’ odgovara izrazima ‘GvR’ i ‘gvr’, ali ne i ‘GVR’.

Skupinama objekta podudaranja sada se može pristupiti pomoću __getitem__, što je ekvivalentno metodi group(). Dakle mo[‘name’] sada je ekvivalentno mo.group(‘name’).

Objekti podudaranja sada podržavaju objekte slične indeksu kao indekse skupina.

socket

Funkcija ioctl() sada podržava kontrolni kod SIO_LOOPBACK_FAST_PATH.

Konstante funkcije getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC i SO_PASSSEC sada su podržane.

setsockopt() sada podržava oblik setsockopt(level, optname, None, optlen: int).

Modul socket sada podržava obitelj adresa AF_ALG za sučelje s kripto API-jem Linux jezgre. Dodani su ALG_, SOL_ALG i sendmsg_afalg().

Dodane su nove Linux konstante TCP_USER_TIMEOUT i TCP_CONGESTION.

ssl

ssl podržava OpenSSL 1.1.0. Najmanja preporučena verzija je 1.0.2.

3DES je uklonjen iz zadanih skupova šifri, a dodani su skupovi šifri ChaCha20 Poly1305.

SSLContext ima bolju zadanu konfiguraciju za opcije i šifre.

SSL sesija može se kopirati s jedne klijentske veze na drugu pomoću nove klase SSLSession. Nastavak TLS sesije može ubrzati početno rukovanje, smanjiti kašnjenje i poboljšati performanse.

Nova metoda get_ciphers() može se koristiti za dohvat popisa omogućenih šifri prema redoslijedu prioriteta šifri.

Sve konstante i zastavice pretvorene su u IntEnum i IntFlags.

Dodani su TLS protokoli specifični za poslužitelj i klijenta za SSLContext.

Dodano je SSLContext.post_handshake_auth za omogućavanje te ssl.SSLSocket.verify_client_post_handshake() za pokretanje autentifikacije nakon rukovanja u TLS-u 1.3.

struct

sada podržava IEEE 754 brojeve s pomičnim zarezom polovične preciznosti putem specifikatora formata ‘e’.

sys

Nova funkcija getfilesystemencodeerrors() vraća naziv načina obrade pogrešaka koji se koristi za pretvorbu između Unicode naziva datoteka i naziva datoteka u bajtovima.

zlib

Funkcije compress() i decompress() sada prihvaćaju ključne argumente

Napomene