Co nowego w Pythonie 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ą
printlen[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

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































