Novità di Python 3.11

Feb 20 2023
Pitone 3.11.

Python 3.11.2 è la versione più recente del popolare linguaggio di programmazione e include una serie di nuove funzionalità e miglioramenti. In questo articolo del blog, esamineremo alcune delle nuove funzionalità di Python 3.11 e forniremo del codice di esempio per iniziare.

Riepilogo

Python 3.11 è più veloce del 10-60% rispetto a 3.10. Misurato un aumento della velocità di 1,25 volte sulla suite di benchmark standard. exceptionCi sono speedmiglioramenti syntax.

Eccezioni

D'ora in poi puoi sollevare più eccezioni utilizzando i gruppi di eccezioni.

PEP 654 introduce funzionalità linguistiche che consentono a un programma di generare e gestire più eccezioni non correlate contemporaneamente. I tipi incorporatiExceptionGroupeBaseExceptionGrouprendono possibile raggruppare le eccezioni e sollevarle insieme, e la nuovaexcept*sintassi si generalizzaexceptper corrispondere ai sottogruppi dei gruppi di eccezioni.

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

Inoltre puoi aggiungere note alla tua eccezione usando questo puoi dare più informazioni facilmente. Devi catturare l'eccezione usando try exceptquindi devi aggiungere una nota e sollevarla di nuovo

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

Nuovo tipo è aggiungere Selfche è normale self.

Nuove funzionalità relative ai suggerimenti di tipo

Questa sezione copre le principali modifiche che interessano i suggerimenti sul tipo PEP 484 e il typingmodulo.

Ecco un esempio:

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 NotRequiredforniscono un modo semplice per contrassegnare se i singoli elementi in a TypedDictdevono essere presenti. In precedenza, ciò era possibile solo utilizzando l'ereditarietà.

Tutti i campi sono ancora obbligatori per impostazione predefinita, a meno che il parametro total non sia impostato su False, nel qual caso tutti i campi non sono ancora obbligatori per impostazione predefinita. Ad esempio, quanto segue specifica a TypedDictcon una chiave richiesta e una non richiesta:

La creazione di dizionari speciali è un'abilità potente se si desidera creare librerie e ridurre gli errori che possono verificarsi dall'utente.

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

Guarda qui per maggiori informazioni

Accelerazione delle operazioni

  • Operazioni binarie x+x; x*x; x-x;10%
  • Pedice a[i]10–25%
  • Memorizza pedice a[i] = z10–25%
  • Chiamate f(arg) C(arg)20%
  • Carica variabile globale print len[1 ]
  • Carica attributo o.attr[ 3]
  • Metodi di caricamento per chiamata o.meth()10–20%
  • Memorizza l'attributo o.attr = z2% in pyperformance
  • Sequenza di disimballaggio *seq8%

Fonte

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