Python 3.8¶
Python 3.8.0 (final) se publicó el 14 de octubre de 2019. Las características de 3.8 se definen en PEP 569 y una descripción detallada de los cambios se puede encontrar en Novedades de Python 3.8.
Características |
Estado |
|
Argumentos solo posicionales |
||
Expresiones de asignación |
Completo |
|
Protocolo pickle 5 con datos fuera de banda |
||
Ganchos de auditoría en tiempo de ejecución |
||
Configuración de inicialización de Python |
||
Vectorcall: un protocolo de llamada rápido para CPython |
||
Varios |
||
Las f-strings admiten = para expresiones autodocumentadas y depuración |
Completo |
|
Otros cambios del lenguaje:
Una sentencia continue era ilegal en la cláusula finally debido a un problema con la implementación. En Python 3.8 se eliminó esta restricción |
Completo |
Los tipos bool, int y fractions.Fraction ahora tienen un método as_integer_ratio() como el que se encuentra en float y decimal.Decimal |
|
Los constructores de int, float y complex ahora usarán el método especial __index__(), si está disponible y el método correspondiente __int__(), __float__() o __complex__() no lo está |
|
Se añadió soporte para escapes N{name} en expresiones regulares |
|
Los dict y las dictviews ahora son iterables en orden de inserción inverso usando reversed() |
|
Se restringió aún más la sintaxis permitida para los nombres de palabra clave en las llamadas a funciones. En particular, f((keyword)=arg) ya no está permitido |
|
El desempaquetado generalizado de iterables en las sentencias yield y return ya no requiere paréntesis envolventes |
|
Cuando falta una coma en código como [(10, 20) (30, 40)], el compilador muestra un SyntaxWarning con una sugerencia útil |
|
Las operaciones aritméticas entre subclases de datetime.date o datetime.datetime y objetos datetime.timedelta ahora devuelven una instancia de la subclase, en lugar de la clase base |
|
Cuando el intérprete de Python es interrumpido por Ctrl-C (SIGINT) y la excepción KeyboardInterrupt resultante no se captura, el proceso de Python ahora sale mediante una señal SIGINT o con el código de salida correcto, de modo que el proceso que lo invoca pueda detectar que terminó debido a un Ctrl-C |
|
Algunos estilos avanzados de programación requieren actualizar el objeto types.CodeType de una función existente |
|
Para los enteros, la forma de tres argumentos de la función pow() ahora permite que el exponente sea negativo en el caso en que la base sea relativamente prima respecto al módulo |
|
Las comprensiones de dict se han sincronizado con los literales de dict, de modo que la clave se calcula primero y el valor después |
|
El método object.__reduce__() ahora puede devolver una tupla de entre dos y seis elementos de longitud |
Cambios en los módulos integrados:
asyncio.run() ha pasado de la API provisional a la estable |
Completo |
Ejecutar python -m asyncio lanza un REPL asíncrono de forma nativa |
|
La excepción asyncio.CancelledError ahora hereda de BaseException en lugar de Exception y ya no hereda de concurrent.futures.CancelledError |
Completo |
Se añadió asyncio.Task.get_coro() para obtener la corrutina envuelta dentro de una asyncio.Task |
|
Las tareas de asyncio ahora se pueden nombrar, ya sea pasando el argumento de palabra clave name a asyncio.create_task() o al método create_task() del bucle de eventos, o llamando al método set_name() en el objeto de tarea |
|
Se añadió soporte para Happy Eyeballs en asyncio.loop.create_connection(). Para especificar el comportamiento, se han añadido dos nuevos parámetros: happy_eyeballs_delay e interleave. |
|
get_objects() ahora puede recibir un parámetro opcional generation que indica una generación de la que obtener objetos. (Tenga en cuenta, sin embargo, que aunque gc es integrado, get_objects() no está implementado en MicroPython) |
|
Se añadió la nueva función math.dist() para calcular la distancia euclidiana entre dos puntos |
|
Se amplió la función math.hypot() para manejar múltiples dimensiones |
|
Se añadió la nueva función math.prod(), análoga a sum(), que devuelve el producto de un valor «start» (por defecto: 1) por un iterable de números |
|
Se añadieron dos nuevas funciones combinatorias math.perm() y math.comb() |
|
Se añadió una nueva función math.isqrt() para calcular raíces cuadradas enteras precisas sin conversión a coma flotante |
|
La función math.factorial() ya no acepta argumentos que no sean similares a enteros |
Completo |
Se añadió la nueva función sys.unraisablehook(), que se puede sobrescribir para controlar cómo se manejan las «excepciones no lanzables» |
|