Python 3.6

Python 3.6 beta 1 byla vydána 12. září 2016 a souhrn nových funkcí lze nalézt zde:

Nové syntaktické funkce

Stav

PEP 498

Formátování literálových řetězců

Hotovo

PEP 515

Podtržítka v číselných literálech

Hotovo

PEP 525

Asynchronní generátory

PEP 526

Syntaxe pro anotace proměnných (předběžné)

Hotovo

PEP 530

Asynchronní komprehenze

Nové vestavěné funkce

PEP 468

Zachování pořadí kwargs ve funkci

PEP 487

Jednodušší přizpůsobení vytváření tříd

Částečně [1]

PEP 520

Zachování pořadí definic atributů třídy

Změny ve standardní knihovně

PEP 495

Rozlišení nejednoznačnosti místního času

PEP 506

Přidání modulu secrets do standardní knihovny

PEP 519

Přidání protokolu pro cesty v souborovém systému

Vnitřnosti CPythonu

PEP 509

Přidání privátní verze do dict

Nebude implementováno

PEP 523

Přidání API pro vyhodnocování rámců do CPythonu

Změny v Linux/Windows

PEP 524

Učinit os.urandom() blokujícím na Linuxu (během spouštění systému)

PEP 528

Změna kódování konzole Windows na UTF-8

PEP 529

Změna kódování souborového systému Windows na UTF-8

Další změny v jazyce:

Příkaz global nebo nonlocal nyní musí v textu zdrojového kódu být uveden před prvním použitím dotčeného jména ve stejném rozsahu. Dříve se jednalo o SyntaxWarning.

Nyní je možné nastavit speciální metodu na None, čímž se signalizuje, že odpovídající operace není k dispozici. Pokud například třída nastaví __iter__() na None, není tato třída iterovatelná.

Dlouhé sekvence opakujících se řádků zpětného sledování (traceback) jsou nyní zkráceny jako [Previous line repeated {count} more times]

Import nyní vyvolává novou výjimku ModuleNotFoundError, když nedokáže najít modul. Kód, který v současnosti kontroluje ImportError (v try-except), bude i nadále fungovat.

Metody třídy spoléhající na super() bez argumentů nyní budou fungovat správně, když jsou volány z metod metatřídy během vytváření třídy.

Změny ve vestavěných modulech:

array

Vyčerpané iterátory array.array nyní zůstanou vyčerpané, i když je iterované pole rozšířeno.

binascii

Funkce b2a_base64() nyní přijímá volitelný klíčový argument newline, kterým lze řídit, zda se k návratové hodnotě přidá znak nového řádku

Hotovo

cmath

Byla přidána nová konstanta cmath.tau (τ)

Nové konstanty: cmath.inf a cmath.nan, aby odpovídaly math.inf a math.nan, a také cmath.infj a cmath.nanj, aby odpovídaly formátu používanému funkcí complex repr

collections

Byla přidána nová abstraktní bázová třída Collection reprezentující iterovatelné kontejnerové třídy se známou velikostí

Nová abstraktní bázová třída Reversible reprezentuje iterovatelné třídy, které také poskytují metodu __reversed__().

Nová abstraktní bázová třída AsyncGenerator reprezentuje asynchronní generátory.

Funkce namedtuple() nyní přijímá volitelný klíčový argument module, který se, je-li uveden, použije pro atribut __module__ vrácené třídy pojmenované n-tice.

Argumenty verbose a rename funkce namedtuple() nyní lze předávat pouze jako klíčové.

Rekurzivní instance collections.deque lze nyní serializovat pomocí pickle.

hashlib

Do modulu byly přidány hashovací funkce BLAKE2. Funkce blake2b() a blake2s() jsou vždy dostupné a podporují plnou sadu funkcí BLAKE2.

Byly přidány hashovací funkce SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512() a hashovací funkce SHAKE shake_128() a shake_256().

Funkce odvození klíče na základě hesla scrypt() je nyní k dispozici s OpenSSL 1.1.0 a novějším.

json

Funkce json.load() a json.loads() nyní podporují binární vstup. Kódovaný JSON by měl být reprezentován pomocí UTF-8, UTF-16 nebo UTF-32.

math

Byla přidána nová konstanta math.tau (τ)

Hotovo

os

Nová metoda close() umožňuje explicitně uzavřít iterátor scandir(). Iterátor scandir() nyní podporuje protokol kontextového správce.

Na Linuxu nyní os.urandom() blokuje, dokud není inicializován systémový fond entropie urandom, čímž se zvyšuje bezpečnost.

Linuxové systémové volání getrandom() (získání náhodných bajtů) je nyní vystaveno jako nová funkce os.getrandom().

re

Byla přidána podpora rozsahů modifikátorů v regulárních výrazech. Příklady: ‚(?i:p)ython‘ odpovídá ‚python‘ a ‚Python‘, ale ne ‚PYTHON‘; ‚(?i)g(?-i:v)r‘ odpovídá ‚GvR‘ a ‚gvr‘, ale ne ‚GVR‘.

Skupiny objektu match lze nyní zpřístupnit pomocí __getitem__, což je ekvivalentní group(). Takže mo[‚name‘] je nyní ekvivalentní mo.group(‚name‘).

Objekty match nyní podporují objekty podobné indexu jako indexy skupin.

socket

Funkce ioctl() nyní podporuje řídicí kód SIO_LOOPBACK_FAST_PATH.

Konstanty funkce getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC a SO_PASSSEC jsou nyní podporovány.

Funkce setsockopt() nyní podporuje formu setsockopt(level, optname, None, optlen: int).

Modul socket nyní podporuje rodinu adres AF_ALG pro propojení s kryptografickým API jádra Linuxu. Byly přidány ALG_, SOL_ALG a sendmsg_afalg().

Byly přidány nové linuxové konstanty TCP_USER_TIMEOUT a TCP_CONGESTION.

ssl

ssl podporuje OpenSSL 1.1.0. Minimální doporučená verze je 1.0.2.

3DES byl odstraněn z výchozích sad šifer a byly přidány sady šifer ChaCha20 Poly1305.

SSLContext má lepší výchozí konfiguraci pro volby a šifry.

SSL relaci lze nyní zkopírovat z jednoho klientského spojení do druhého pomocí nové třídy SSLSession. Obnovení relace TLS může urychlit počáteční handshake, snížit latenci a zlepšit výkon.

Novou metodu get_ciphers() lze použít k získání seznamu povolených šifer v pořadí priority šifer.

Všechny konstanty a příznaky byly převedeny na IntEnum a IntFlags.

Byly přidány TLS protokoly specifické pro server a klienta pro SSLContext.

Byly přidány SSLContext.post_handshake_auth pro povolení a ssl.SSLSocket.verify_client_post_handshake() pro zahájení autentizace TLS 1.3 po handshaku.

struct

nyní podporuje čísla s plovoucí desetinnou čárkou poloviční přesnosti dle IEEE 754 prostřednictvím specifikátoru formátu ‚e‘.

sys

Nová funkce getfilesystemencodeerrors() vrací název režimu chyb použitého k převodu mezi názvy souborů v Unicode a názvy souborů v bajtech.

zlib

Funkce compress() a decompress() nyní přijímají klíčové argumenty

Poznámky