O que há de novo no Python 3.11

Feb 20 2023
Python 3.11.

Python 3.11.2 é a versão mais recente da popular linguagem de programação e inclui vários novos recursos e melhorias. Neste artigo do blog, veremos alguns dos novos recursos do Python 3.11 e forneceremos alguns exemplos de código para você começar.

Resumo

O Python 3.11 é 10–60% mais rápido que o 3.10. Mediu um aumento de velocidade de 1,25x no conjunto de benchmark padrão. Há exception, speed, syntaxmelhorias.

Exceções

De agora em diante, você pode gerar várias exceções usando grupos de exceção.

O PEP 654 introduz recursos de linguagem que permitem que um programa gere e manipule várias exceções não relacionadas simultaneamente. Os tipos integradosExceptionGrouptornamBaseExceptionGrouppossível agrupar exceções e criá-las juntas, e a novaexcept*sintaxe generalizaexceptpara corresponder a subgrupos de grupos de exceção.

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

Além disso, você pode adicionar notas à sua exceção usando isso para fornecer mais informações facilmente. Você precisa capturar a exceção usando, try exceptentão você precisa adicionar uma nota e aumentá-la novamente

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

O novo tipo é adicionado, Selfo que é normal self.

Novos recursos relacionados a dicas de digitação

Esta seção aborda as principais mudanças que afetam as dicas do tipo PEP 484 e o typingmódulo.

Aqui está um exemplo:

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>

Requirede NotRequiredfornecer uma maneira direta de marcar se itens individuais em um TypedDictdevem estar presentes. Anteriormente, isso só era possível usando herança.

Todos os campos ainda são obrigatórios por padrão, a menos que o parâmetro total seja definido como False, caso em que todos os campos ainda não são obrigatórios por padrão. Por exemplo, o seguinte especifica um TypedDictcom uma chave obrigatória e outra não obrigatória:

A criação de dicionários especiais é uma habilidade poderosa se você deseja criar bibliotecas e reduzir erros que podem ocorrer do usuário.

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

Veja aqui mais informações

Aceleração de operação

  • Operações binárias x+x; x*x; x-x;10%
  • Subscrito a[i]10–25%
  • Subscrito da loja a[i] = z10–25%
  • Chamadas f(arg) C(arg)20%
  • Carregar variável global print len[1 ]
  • Carregar atributo o.attr[ 3]
  • Carregar métodos para chamada o.meth()10–20%
  • Atributo da loja o.attr = z2% em pyperformance
  • Sequência de descompactação *seq8%

Fonte

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