¿Qué hay de nuevo en Python 3.13?
Sobre mí Nekmo
Programador Python |
Charlas anteriores
¿Qué hay de nuevo en Python 3.13?
Python Málaga + PyData Málaga
¿Más rápido?
Python 3.13 retrasado
¿Cuánto más rápido es?
Muerte
Ahora sin GIL
GIL
Cediendo el control
Un solo núcleo
Python sin GIL
Pelea entre hilos
Python 3.13 sin GIL con hilos
Nuevo JIT experimental
Compilador Just-In-Time
Python 3.13 con JIT experimental
Mejoras en la línea de comandos
¡Colores!
Copiar y pegar más fácil
F2 Historial F3 Modo pegar
Modo ayuda
F1 Ayuda
help, exit y quit sin paréntesis
help exit quit
Mejoras en mensajes de error
Nombres de módulo ya en uso
$ python random.py
Traceback (most recent call last):
File "/home/me/random.py", line 1, in <module>
import random
File "/home/me/random.py", line 3, in <module>
print(random.randint(5))
^^^^^^^^^^^^^^
AttributeError: module 'random' has no attribute 'randint'
(consider renaming '/home/me/random.py' since it has the
same name as the standard library module named 'random'
and the import system gives it precedence)
Nombre de parámetro equivocado
>>> "Better error messages!".split(max_split=1)
Traceback (most recent call last):
File "<python-input-0>", line 1, in <module>
"Better error messages!".split(max_split=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
TypeError: split() got an unexpected keyword argument
'max_split'. Did you mean 'maxsplit'?
Mejoras en typing
Regalos
PEP 696: Tipos por defecto en TypeVar, ParamSpec y TypeVarTuple
T = TypeVar("T", default=int)
@dataclass
class Box(Generic[T]):
value: T | None = None
reveal_type(Box()) # type is Box[int]
reveal_type(Box(value="Hello World!")) # type is Box[str]
PEP 702: Decorador warnings.deprecated()
from warnings import deprecated
@deprecated("It is pining for the fiords")
def norwegian_blue(x: int) -> int: ...
@deprecated("Use Spam instead")
class Ham: ...
class Spam:
@deprecated("There is enough spam in the world")
def __add__(self, other: object) -> object: ...
PEP 705: Sólo lectura en TypedDict
from typing import NotRequired, ReadOnly, TypedDict
class Movie(TypedDict):
name: ReadOnly[str]
year: ReadOnly[NotRequired[int | None]]
PEP 742: TypeIs
from typing import TypeIs
def is_int(x: object) -> TypeIs[int]:
return isinstance(x, int)
PEP 667: Mejoras en locals()
class C:
x = 1
sys._getframe().f_locals['x'] = 2
print(x) # Print 2
def f():
x = 1
sys._getframe().f_locals['x'] = 2
print(x) # Print 1
f()
Otros cambios
Nueva excepción
PythonFinalizationError
, si hay bloqueos durante finalización.argparse
ahora soporta marcar como obsoleto comandos, argumentos...Soporte para codificación z85, usada por ZeroMQ o Git, en el módulo
base64
.copy.replace()
copia y reemplaza del objeto copiado.El módulo
random
ahora incluye línea de comandos.
Eliminaciones
Eliminación de módulos muertos de stdlib:
aifc
,audioop
,cgi
,cgitb
,chunk
,crypt
...Eliminado 2to3 y lib2to3 (obsoleto desde 3.11).
Eliminado
tkinter.tix
(obsoleto desde 3.6).Eliminada
locale.resetlocale()
Eliminados
typing.io
ytyping.re
.Eliminados los descriptores tipo
__get__
y__set__
de@classmethod
.
Aplausos módulos muertos y 2to3
Plataformas soportadas
PEP 730: iOS está oficialmente soportado (tier 3).
PEP 738: Android está oficialmente soportado (tier 3).
wasm32-wasi pasa a ser tier 2.
wasm32-emscripten ya no está oficialmente soportado.
Listado completo de cambios
¿Cuál es vuestra mejora favorita?
¡Muchas gracias a todos!
PyData
Plytix
Pyzzas
Python Málaga
🌐 Sitio web: python-malaga.es.
🤝 Meetup: meetup.com/Python-Malaga.
🐦 Twitter: @python_malaga.
💼 LinkedIn: linkedin.com/groups/13110576.
📱 Telegram: python_malaga.
QR
Contactar
🌐 Sitio web: nekmo.com
📫 Email: contacto@nekmo.com
🐦 Twitter: @nekmocom
📱 Telegram: @nekmo
💡 Jabber: nekmo@nekmo.org