Novedades en Python 3.11

Feb 20 2023
Pitón 3.11.

Python 3.11.2 es la versión más reciente del popular lenguaje de programación e incluye una serie de nuevas características y mejoras. En este artículo de blog, veremos algunas de las nuevas características de Python 3.11 y le daremos un código de muestra para que pueda comenzar.

Resumen

Python 3.11 es entre un 10 y un 60 % más rápido que 3.10. Midió una aceleración de 1,25x en el conjunto de referencia estándar. Hay exception, speed, syntaxmejoras.

Excepciones

A partir de ahora, puede generar varias excepciones mediante el uso de grupos de excepción.

PEP 654 introduce funciones de lenguaje que permiten que un programa genere y maneje múltiples excepciones no relacionadas simultáneamente. Los tipos incorporadosExceptionGroupyBaseExceptionGrouphacen posible agrupar excepciones y generarlas juntas, y la nuevaexcept*sintaxis se generalizaexceptpara hacer coincidir subgrupos de grupos de excepciones.

https://docs.python.org/3/whatsnew/3.11.html#whatsnew311-pep654

También puede agregar notas a su excepción al usar esto, puede brindar más información fácilmente. Necesita capturar la excepción usando, try exceptluego necesita agregar una nota y volver a subirla

try:
    i = 1 / 0
except Exception as e:
    e.add_note("New Note: Zero Division Error")
    raise
Traceback (most recent call last):
  File "C:/Users/Sarper/Desktop/test.py", line 2, in <module>
    i = 1 / 0
ZeroDivisionError: division by zero
New Note: Zero Division Error

El nuevo tipo es add Self, que es normal self.

Nuevas funciones relacionadas con las sugerencias de tipo

Esta sección cubre los principales cambios que afectan a las sugerencias de tipo PEP 484 y al typingmódulo.

Aquí hay un ejemplo:

from typing import Self

class MyClass:
    def __init__(self, num):
        self.num = num

    def create_class(self) -> Self:
        return MyClass(3) # returning new class

my_class = MyClass(2)
print(my_class.create_class())

# OUTPUT:
# <__main__.MyClass object at 0x000002477E1D0250>
from typing import Self

class MyClass:
    def __init__(self, num):
        self.num = num

    def return_class(self) -> Self:
        return self # returning self

my_class = MyClass(2)
print(my_class.return_class())

# OUTPUT:
<__main__.MyClass object at 0x0000014B89E71350>

Requiredy NotRequiredproporcionar una forma sencilla de marcar si los elementos individuales en un TypedDictdeben estar presentes. Anteriormente, esto solo era posible mediante la herencia.

Todos los campos siguen siendo obligatorios de forma predeterminada, a menos que el parámetro total se establezca en False, en cuyo caso todos los campos siguen sin ser obligatorios de forma predeterminada. Por ejemplo, lo siguiente especifica una TypedDictcon una clave requerida y una no requerida:

La creación de diccionarios especiales es una capacidad poderosa si desea crear bibliotecas y reducir los errores que pueden ocurrir por parte del usuario.

class Movie(TypedDict):
   title: str
   year: NotRequired[int]

m1: Movie = {"title": "Black Panther", "year": 2018}  # OK
m2: Movie = {"title": "Star Wars"}  # OK (year is not required)
m3: Movie = {"year": 2022}  # ERROR (missing required field title)

class Movie(TypedDict, total=False):
   title: Required[str]
   year: int

asyncio contextlib dataclasses datatime enum fcntl fractions functools haslib inpect locale logging math operator os pathlib re shutlit socket sqlite3 string sys sysconfig tempfile threading time tkinter traceback typing unicodedata unittest venv warnings zipfile

Vea aquí para más información

Aceleración de operaciones

  • Operaciones binarias x+x; x*x; x-x;10%
  • Subíndice a[i]10–25%
  • Almacenar subíndice a[i] = z10–25%
  • Llamadas f(arg) C(arg)20%
  • Cargar variable global print len[1 ]
  • Cargar atributo o.attr[ 3]
  • Cargar métodos para llamada o.meth()10–20%
  • Almacenar atributo o.attr = z2% en pyperformance
  • Secuencia de descompresión *seq8%

Fuente

https://docs.python.org/3/whatsnew/3.11.html