Co nowego w Pythonie 3.11

Feb 20 2023
Pythona 3.11.

Python 3.11.2 to najnowsza wersja popularnego języka programowania, zawierająca szereg nowych funkcji i ulepszeń. W tym artykule na blogu przyjrzymy się niektórym nowym funkcjom Pythona 3.11 i podamy przykładowy kod na początek.

Streszczenie

Python 3.11 jest o 10–60% szybszy niż 3.10. Zmierzono przyspieszenie 1,25x w standardowym pakiecie porównawczym. Jest exception, speed, syntaxulepszeń.

Wyjątki

Od teraz możesz zgłaszać wiele wyjątków za pomocą grup wyjątków.

PEP 654 wprowadza funkcje językowe, które umożliwiają programowi zgłaszanie i obsługę wielu niepowiązanych wyjątków jednocześnie. Wbudowane typyExceptionGroupiBaseExceptionGroupumożliwiają grupowanie wyjątków i podnoszenie ich razem, a nowaexcept*składnia uogólnia sięexcept, aby dopasować podgrupy grup wyjątków.

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

Możesz także dodawać notatki do swojego wyjątku, używając tego, aby łatwo podać więcej informacji. Musisz złapać wyjątek za pomocą, try excepta następnie dodać notatkę i podnieść ją ponownie

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

Nowy typ jest dodawany, Selfco jest normalne self.

Nowe funkcje związane ze wskazówkami typu

W tej sekcji omówiono główne zmiany wpływające na wskazówki typu PEP 484 i typingmoduł.

Oto przykład:

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>

Requiredi NotRequiredzapewniają prosty sposób oznaczania, czy poszczególne elementy muszą TypedDictbyć obecne. Wcześniej było to możliwe tylko przy użyciu dziedziczenia.

Domyślnie wszystkie pola są nadal wymagane, chyba że parametr total jest ustawiony na False, w którym to przypadku domyślnie wszystkie pola nadal nie są wymagane. Na przykład, poniżej określono a TypedDictz jednym wymaganym i jednym niewymaganym kluczem:

Tworzenie specjalnych słowników to potężna umiejętność, jeśli chcesz budować biblioteki i redukować błędy, które mogą wystąpić ze strony użytkownika.

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

Zajrzyj tutaj, aby uzyskać więcej informacji

Przyspieszenie operacji

  • Operacje binarne x+x; x*x; x-x;10%
  • Indeks dolny a[i]10–25%
  • Sklep indeks dolny a[i] = z10-25%
  • Połączenia f(arg) C(arg)20%
  • Załaduj zmienną globalną print len[1 ]
  • Załaduj atrybut o.attr[ 3]
  • Załaduj metody dla wywołania o.meth()10–20%
  • Przechowuj atrybut o.attr = z2% w pyperformance
  • Sekwencja rozpakowania *seq8%

Źródło

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