Python
Tutorial Python: Novedades Python 3.13
Descubre las novedades de Python 3.13 con mejoras en rendimiento, tipado, seguridad y nuevas funcionalidades para programadores avanzados.
Aprende Python y certifícatePrincipales características nuevas de Python 3.13
Python 3.13 introduce mejoras significativas en rendimiento, sintaxis y funcionalidades que optimizan el desarrollo y la ejecución de aplicaciones. Esta versión continúa la evolución del lenguaje con características que facilitan la escritura de código más limpio y eficiente.
Mejoras en el sistema de tipos
Python 3.13 refuerza su sistema de tipado gradual con nuevas características que mejoran la verificación estática de tipos sin sacrificar la flexibilidad dinámica del lenguaje.
Tipos genéricos autónomos
Ahora es posible definir tipos genéricos sin necesidad de heredar de typing.Generic
, lo que simplifica la creación de anotaciones de tipo:
from typing import TypeVar
T = TypeVar('T')
# Nuevo en Python 3.13: tipo genérico autónomo
class Box[T]: # Sin necesidad de heredar de Generic[T]
def __init__(self, value: T) -> None:
self.value = value
def get(self) -> T:
return self.value
# Uso
int_box = Box[int](42)
str_box = Box[str]("Hello")
Mejoras en TypedDict
Se ha mejorado el soporte para TypedDict
con la posibilidad de definir campos opcionales de manera más intuitiva:
from typing import TypedDict, NotRequired
# Nuevo en Python 3.13: sintaxis mejorada para campos opcionales
class UserProfile(TypedDict):
name: str
age: int
email: NotRequired[str] # Campo opcional
address: NotRequired[str] # Campo opcional
# Un diccionario válido sin los campos opcionales
user: UserProfile = {"name": "Ana", "age": 28}
Optimizaciones de rendimiento
Nuevo intérprete más rápido
Python 3.13 incluye mejoras significativas en el intérprete que reducen el tiempo de ejecución de código:
# Las operaciones con cadenas son hasta un 30% más rápidas
def concatenar_cadenas(n: int) -> str:
resultado = ""
for i in range(n):
resultado += str(i)
return resultado
# Las operaciones con diccionarios también se han optimizado
def operaciones_diccionario(n: int) -> dict:
d = {}
for i in range(n):
d[f"clave_{i}"] = i * 2
return d
Mejoras en la gestión de memoria
Se ha optimizado el recolector de basura para reducir las pausas y mejorar la eficiencia en la gestión de memoria:
# Código que crea y destruye muchos objetos
# se beneficia de las mejoras en el recolector de basura
def crear_objetos_temporales(n: int) -> None:
for _ in range(n):
# Estos objetos se liberan más eficientemente en Python 3.13
[list(range(100)) for _ in range(1000)]
Nuevas características del lenguaje
Operador de unión de patrones
Python 3.13 introduce el operador |
para unir patrones en las estructuras match/case
, permitiendo una sintaxis más concisa:
def analizar_valor(valor):
match valor:
# Nuevo en Python 3.13: unión de patrones con |
case int() | float() as num if num > 0:
return f"Número positivo: {num}"
case str() | bytes() as texto:
return f"Texto de longitud {len(texto)}"
case _:
return "Otro tipo de valor"
print(analizar_valor(42)) # "Número positivo: 42"
print(analizar_valor("Python")) # "Texto de longitud 6"
Mejoras en f-strings
Las f-strings ahora permiten expresiones más complejas y anidamiento de llaves de manera más intuitiva:
nombre = "Python"
version = 3.13
# Nuevo en Python 3.13: sintaxis mejorada para f-strings
mensaje = f"Bienvenido a {nombre} {version}"
print(mensaje) # "Bienvenido a Python 3.13"
# Anidamiento de llaves más intuitivo
datos = {"lenguaje": "Python", "versión": 3.13}
print(f"Usando {datos['lenguaje']} {datos['versión']}") # "Usando Python 3.13"
Mejoras en la biblioteca estándar
Nuevo módulo asyncio.taskgroup
Python 3.13 introduce un nuevo módulo para gestionar grupos de tareas asíncronas de manera más eficiente:
import asyncio
from asyncio.taskgroup import TaskGroup
async def tarea(nombre: str, segundos: float) -> str:
await asyncio.sleep(segundos)
return f"Tarea {nombre} completada"
async def main():
# Nuevo en Python 3.13: TaskGroup para gestionar tareas relacionadas
async with TaskGroup() as tg:
# Crear varias tareas que se ejecutan concurrentemente
tarea1 = tg.create_task(tarea("A", 1.0))
tarea2 = tg.create_task(tarea("B", 0.5))
tarea3 = tg.create_task(tarea("C", 1.5))
# Todas las tareas están completadas cuando salimos del bloque with
resultados = [tarea1.result(), tarea2.result(), tarea3.result()]
print(resultados)
asyncio.run(main())
Mejoras en el módulo pathlib
El módulo pathlib
ha sido mejorado con nuevos métodos para operaciones comunes con archivos:
from pathlib import Path
# Nuevo en Python 3.13: método walk() para recorrer directorios
def listar_archivos_python(directorio: str) -> list[str]:
ruta = Path(directorio)
archivos_python = []
# Método walk() similar a os.walk pero con la API de Path
for ruta_actual, directorios, archivos in ruta.walk():
for archivo in archivos:
if archivo.suffix == '.py':
archivos_python.append(str(ruta_actual / archivo))
return archivos_python
# Nuevo método copy() para copiar archivos
def copiar_archivo(origen: str, destino: str) -> None:
Path(origen).copy(Path(destino))
Mejoras en la seguridad
Validación mejorada de entradas
Python 3.13 incluye mejoras en la validación de entradas para prevenir vulnerabilidades:
import json
from json.decoder import JSONDecodeError
def procesar_json_seguro(entrada: str) -> dict:
try:
# Validación mejorada en Python 3.13
datos = json.loads(entrada, parse_constant=lambda x: None)
return datos
except JSONDecodeError:
return {"error": "Formato JSON inválido"}
except Exception as e:
return {"error": f"Error inesperado: {str(e)}"}
Mejoras en el módulo ssl
El módulo ssl
ha sido actualizado para soportar los protocolos de seguridad más recientes:
import ssl
import socket
def crear_conexion_segura(host: str, puerto: int) -> socket.socket:
# Configuración de contexto SSL con opciones de seguridad mejoradas
contexto = ssl.create_default_context()
# Nuevas opciones de seguridad en Python 3.13
contexto.minimum_version = ssl.TLSVersion.TLSv1_3
contexto.set_ciphers('HIGH:!aNULL:!eNULL:!MD5:!3DES')
# Crear socket y envolver con SSL
sock = socket.create_connection((host, puerto))
return contexto.wrap_socket(sock, server_hostname=host)
Mejoras en el manejo de excepciones
Python 3.13 introduce mejoras en el manejo de excepciones para facilitar la depuración y el mantenimiento del código:
# Nuevo en Python 3.13: notas en excepciones
def dividir(a: int, b: int) -> float:
try:
return a / b
except ZeroDivisionError as e:
# Añadir información contextual a la excepción
e.add_note(f"Intento de división por cero: {a} / {b}")
raise
# Captura de excepciones con información adicional
try:
resultado = dividir(10, 0)
except ZeroDivisionError as e:
print(f"Error: {e}")
# Acceder a las notas de la excepción
for nota in e.__notes__:
print(f"Nota: {nota}")
Mejoras en la compatibilidad con otras tecnologías
Python 3.13 mejora la interoperabilidad con otras tecnologías y sistemas:
# Mejor soporte para integración con C/C++
from ctypes import cdll, c_int, c_double
# Cargar biblioteca compartida
lib = cdll.LoadLibrary("./libejemplo.so")
# Definir tipos de argumentos y retorno
lib.calcular.argtypes = [c_int, c_double]
lib.calcular.restype = c_double
# Llamar a función C desde Python
resultado = lib.calcular(42, 3.14)
print(f"Resultado de la función C: {resultado}")
Otras lecciones de Python
Accede a todas las lecciones de Python y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Python
Introducción
Instalación Y Creación De Proyecto
Introducción
Tema 2: Tipos De Datos, Variables Y Operadores
Introducción
Instalación De Python
Introducción
Tipos De Datos
Sintaxis
Variables
Sintaxis
Ejercicios de programación de Python
Evalúa tus conocimientos de esta lección Novedades Python 3.13 con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.