Python 3.9¶
Python 3.9.0 (final) se publicó el 5 de octubre de 2020. Las características de 3.9 se definen en PEP 596 y una descripción detallada de los cambios se puede encontrar en Novedades de Python 3.9
Características | Estado | |
Acceso rápido al estado del módulo desde métodos de tipos de extensión en C | No relevante | |
Operadores de unión añadidos a dict | Completo [1] | |
Sugerencias de tipo genéricas en colecciones estándar | ||
Anotaciones flexibles de funciones y variables | ||
CPython adopta un ciclo de lanzamiento anual. En lugar de anual, apunta a un ciclo de lanzamiento de dos meses | No relevante | |
Restricciones gramaticales relajadas en los decoradores | ||
La base de datos de zonas horarias de la IANA ahora está presente en la biblioteca estándar en el módulo zoneinfo | ||
Métodos de cadena para eliminar prefijos y sufijos | ||
CPython ahora usa un nuevo analizador basado en PEG | No relevante |
Otros cambios del lenguaje:
__import__() ahora lanza ImportError en lugar de ValueError | Completo |
Python ahora obtiene la ruta absoluta del nombre de archivo del script especificado en la línea de comandos (ej.: python3 script.py): el atributo __file__ del módulo __main__ pasó a ser una ruta absoluta, en lugar de una ruta relativa | |
Por defecto, para obtener el mejor rendimiento, el argumento errors solo se comprueba en el primer error de codificación/decodificación, y el argumento encoding a veces se ignora para cadenas vacías | |
«».replace(«», s, n) ahora devuelve s en lugar de una cadena vacía para todo n distinto de cero. Ahora es coherente con «».replace(«», s) | |
Cualquier expresión válida ahora se puede usar como decorador. Anteriormente, la gramática era mucho más restrictiva | |
La ejecución en paralelo de aclose() / asend() / athrow() ahora está prohibida, y ag_running ahora refleja el estado real de ejecución del generador asíncrono | |
Los errores inesperados al llamar al método __iter__ ya no quedan enmascarados por TypeError en el operador in y en las funciones contains(), indexOf() y countOf() del módulo operator | |
Las expresiones lambda sin paréntesis ya no pueden ser la parte de expresión en una cláusula if dentro de comprensiones y expresiones generadoras |
Cambios en los módulos integrados:
Debido a importantes preocupaciones de seguridad, el parámetro reuse_address de asyncio.loop.create_datagram_endpoint() ya no es compatible | |
Se añadió una nueva corrutina shutdown_default_executor() que programa un apagado del ejecutor predeterminado, esperando a que el ThreadPoolExecutor termine de cerrarse. Además, asyncio.run() se ha actualizado para usar la nueva corrutina. | |
Se añadió asyncio.PidfdChildWatcher, una implementación de vigilante de procesos hijos específica de Linux que sondea descriptores de archivo de procesos | |
se añadió una nueva coroutine asyncio.to_thread() | |
Al cancelar la tarea debido a un tiempo de espera, asyncio.wait_for() ahora esperará hasta que la cancelación se complete también en el caso de que el tiempo de espera sea <= 0, igual que hace con tiempos de espera positivos | |
asyncio ahora lanza TyperError al llamar a métodos incompatibles con un socket ssl.SSLSocket | |
La recolección de basura ya no se bloquea con objetos resucitados | |
Se añadió una nueva función gc.is_finalized() para comprobar si un objeto ha sido finalizado por el recolector de basura | |
Se amplió la función math.gcd() para manejar múltiples argumentos. Anteriormente, solo admitía dos argumentos | |
Se añadió math.lcm(): devuelve el mínimo común múltiplo de los argumentos especificados | |
Se añadió math.nextafter(): devuelve el siguiente valor de coma flotante después de x en dirección a y | |
Se añadió math.ulp(): devuelve el valor del bit menos significativo de un float | |
Se expusieron os.pidfd_open() y os.P_PIDFD, específicos de Linux | |
La función os.unsetenv() ahora también está disponible en Windows | Completo |
Las funciones os.putenv() y os.unsetenv() ahora están siempre disponibles | Completo |
Se añadió la función os.waitstatus_to_exitcode(): convierte un estado de espera en un código de salida | |
Se añadió un nuevo método random.Random.randbytes: genera bytes aleatorios | |
Se añadió un nuevo atributo sys.platlibdir: nombre del directorio de bibliotecas específico de la plataforma | |
Anteriormente, sys.stderr usaba búfer por bloques cuando no era interactivo. Ahora stderr usa por defecto siempre búfer por líneas | |
Notas