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