Python 3.6

Python 3.6 beta 1 se publicó el 12 de septiembre de 2016, y aquí puede encontrar un resumen de las nuevas características:

Nuevas características de sintaxis

Estado

PEP 498

Formato literal de cadenas

Completo

PEP 515

Guiones bajos en literales numéricos

Completo

PEP 525

Generadores asíncronos

PEP 526

Sintaxis para anotaciones de variables (provisional)

Completo

PEP 530

Comprensiones asíncronas

Nuevas características integradas

PEP 468

Preservación del orden de kwargs en una función

PEP 487

Personalización más sencilla de la creación de clases

Parcial [1]

PEP 520

Preservación del orden de definición de los atributos de clase

Cambios en la biblioteca estándar

PEP 495

Desambiguación de la hora local

PEP 506

Adición de un módulo de secretos a la biblioteca estándar

PEP 519

Adición de un protocolo de rutas del sistema de archivos

Internos de CPython

PEP 509

Adición de una versión privada a dict

No se hará

PEP 523

Adición de una API de evaluación de fotogramas a CPython

Cambios en Linux/Windows

PEP 524

Hacer que os.urandom() sea bloqueante en Linux (durante el arranque del sistema)

PEP 528

Cambiar la codificación de la consola de Windows a UTF-8

PEP 529

Cambiar la codificación del sistema de archivos de Windows a UTF-8

Otros cambios del lenguaje:

Una sentencia global o nonlocal ahora debe aparecer textualmente antes del primer uso del nombre afectado en el mismo ámbito. Anteriormente esto era un SyntaxWarning.

Ahora es posible asignar None a un método especial para indicar que la operación correspondiente no está disponible. Por ejemplo, si una clase asigna None a __iter__() , la clase no es iterable.

Las secuencias largas de líneas de traza repetidas ahora se abrevian como [Previous line repeated {count} more times]

La importación ahora lanza la nueva excepción ModuleNotFoundError cuando no puede encontrar un módulo. El código que actualmente comprueba ImportError (en try-except) seguirá funcionando.

Los métodos de clase que dependen de super() sin argumentos ahora funcionarán correctamente cuando se llamen desde métodos de metaclase durante la creación de la clase.

Cambios en los módulos integrados:

array

Los iteradores agotados de array.array ahora permanecerán agotados aunque se extienda el array iterado.

binascii

La función b2a_base64() ahora acepta un argumento de palabra clave opcional newline para controlar si se añade el carácter de nueva línea al valor de retorno

Completo

cmath

Se ha añadido la nueva constante cmath.tau (τ)

Nuevas constantes: cmath.inf y cmath.nan para coincidir con math.inf y math.nan , y también cmath.infj y cmath.nanj para coincidir con el formato usado por el repr de los números complejos

collections

Se ha añadido la nueva clase base abstracta Collection para representar clases contenedoras iterables con tamaño

La nueva clase base abstracta Reversible representa clases iterables que también proporcionan el método __reversed__().

La nueva clase base abstracta AsyncGenerator representa generadores asíncronos.

La función namedtuple() ahora acepta un argumento de palabra clave opcional module que, cuando se especifica, se usa para el atributo __module__ de la clase de tupla con nombre devuelta.

Los argumentos verbose y rename de namedtuple() ahora son solo de palabra clave.

Las instancias recursivas de collections.deque ahora se pueden serializar con pickle.

hashlib

Se añadieron al módulo las funciones de hash BLAKE2. blake2b() y blake2s() están siempre disponibles y admiten el conjunto completo de características de BLAKE2.

Se añadieron las funciones de hash SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512(), y las funciones de hash SHAKE shake_128() y shake_256().

La función de derivación de claves basada en contraseña scrypt() ahora está disponible con OpenSSL 1.1.0 y versiones posteriores.

json

json.load() y json.loads() ahora admiten entrada binaria. El JSON codificado debe representarse usando UTF-8, UTF-16 o UTF-32.

math

Se ha añadido la nueva constante math.tau (τ)

Completo

os

Un nuevo método close() permite cerrar explícitamente un iterador de scandir(). El iterador de scandir() ahora admite el protocolo de gestor de contexto.

En Linux, os.urandom() ahora se bloquea hasta que el grupo de entropía urandom del sistema se inicializa, para aumentar la seguridad.

La llamada al sistema getrandom() de Linux (obtener bytes aleatorios) ahora se expone como la nueva función os.getrandom().

re

Se añadió soporte para tramos de modificadores en expresiones regulares. Ejemplos: “(?i:p)ython” coincide con “python” y “Python”, pero no con “PYTHON”; “(?i)g(?-i:v)r” coincide con “GvR” y “gvr”, pero no con “GVR”.

Los grupos de un objeto Match se pueden acceder mediante __getitem__, que es equivalente a group(). Así, mo[“name”] ahora es equivalente a mo.group(“name”).

Los objetos Match ahora admiten objetos similares a índices como índices de grupo.

socket

La función ioctl() ahora admite el código de control SIO_LOOPBACK_FAST_PATH.

Ahora se admiten las constantes de getsockopt() SO_DOMAIN , SO_PROTOCOL, SO_PEERSEC y SO_PASSSEC.

setsockopt() ahora admite la forma setsockopt(level, optname, None, optlen: int).

El módulo socket ahora admite la familia de direcciones AF_ALG para interactuar con la API de criptografía del kernel de Linux. Se añadieron ALG_, SOL_ALG y sendmsg_afalg().

Se añadieron las nuevas constantes de Linux TCP_USER_TIMEOUT y TCP_CONGESTION.

ssl

ssl admite OpenSSL 1.1.0. La versión mínima recomendada es 1.0.2.

Se ha eliminado 3DES de los conjuntos de cifrado predeterminados y se han añadido los conjuntos de cifrado ChaCha20 Poly1305.

SSLContext tiene una mejor configuración predeterminada para opciones y cifrados.

Una sesión SSL se puede copiar de una conexión del lado del cliente a otra con la nueva clase SSLSession. La reanudación de sesión TLS puede acelerar el protocolo de enlace inicial, reducir la latencia y mejorar el rendimiento.

El nuevo método get_ciphers() se puede usar para obtener una lista de los cifrados habilitados en orden de prioridad de cifrado.

Todas las constantes y banderas se han convertido a IntEnum e IntFlags.

Se añadieron protocolos TLS específicos para el lado del servidor y del cliente en SSLContext.

Se añadió SSLContext.post_handshake_auth para habilitar y ssl.SSLSocket.verify_client_post_handshake() para iniciar la autenticación posterior al protocolo de enlace de TLS 1.3.

struct

ahora admite números de coma flotante de media precisión IEEE 754 mediante el especificador de formato “e”.

sys

La nueva función getfilesystemencodeerrors() devuelve el nombre del modo de error usado para convertir entre nombres de archivo Unicode y nombres de archivo de bytes.

zlib

Las funciones compress() y decompress() ahora aceptan argumentos de palabra clave

Notas