Có gì mới trong Python 3.11
Python 3.11.2 là phiên bản mới nhất của ngôn ngữ lập trình phổ biến này và nó bao gồm một số tính năng và cải tiến mới. Trong bài viết blog này, chúng ta sẽ xem xét một số tính năng mới trong Python 3.11 và cung cấp một số mã mẫu để giúp bạn bắt đầu.
Bản tóm tắt
Python 3.11 nhanh hơn 10–60% so với 3.10. Đã đo tốc độ tăng 1,25 lần trên bộ điểm chuẩn tiêu chuẩn. Có exception, speed, syntaxcải tiến.
ngoại lệ
Từ bây giờ, bạn có thể đưa ra nhiều ngoại lệ bằng cách sử dụng các nhóm ngoại lệ.
PEP 654 giới thiệu các tính năng ngôn ngữ cho phép chương trình tăng và xử lý đồng thời nhiều ngoại lệ không liên quan. Các loại dựng sẵnExceptionGroupvàBaseExceptionGroupcho phép nhóm các ngoại lệ và nâng cao chúng lại với nhau, đồng thờiexcept*cú pháp mới khái quát hóaexceptđể khớp với các nhóm con của các nhóm ngoại lệ.
https://docs.python.org/3/whatsnew/3.11.html#whatsnew311-pep654
Ngoài ra, bạn có thể thêm ghi chú vào ngoại lệ của mình bằng cách sử dụng tính năng này, bạn có thể cung cấp thêm thông tin một cách dễ dàng. Bạn cần bắt ngoại lệ bằng cách sử dụng, try exceptsau đó bạn cần thêm ghi chú và tăng lại
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
Loại mới là thêm Selfđó là bình thường self.
Các tính năng mới liên quan đến gợi ý loại
Phần này đề cập đến những thay đổi lớn ảnh hưởng đến gợi ý loại PEP 484 và typingmô-đun.
Đây là một ví dụ:
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>
Requiredvà NotRequiredcung cấp một cách đơn giản để đánh dấu xem các mục riêng lẻ trong một TypedDictphải có mặt hay không. Trước đây, điều này chỉ có thể thực hiện được bằng cách sử dụng tính kế thừa.
Tất cả các trường vẫn được yêu cầu theo mặc định, trừ khi tham số tổng được đặt thành False, trong trường hợp đó, tất cả các trường vẫn không bắt buộc theo mặc định. Ví dụ: phần sau chỉ định a TypedDictvới một khóa bắt buộc và một khóa không bắt buộc:
Tạo từ điển đặc biệt là một khả năng mạnh mẽ nếu bạn muốn xây dựng thư viện và giảm lỗi có thể xảy ra từ người dùng.
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
Nhìn vào đây để biết thêm thông tin
Tăng tốc hoạt động
- Hoạt động nhị phân
x+x; x*x; x-x;10% - Đăng ký
a[i]10–25% - Lưu trữ chỉ số dưới
a[i] = z10–25% - Cuộc gọi
f(arg)C(arg)20% - Tải biến toàn cục
printlen[1 ] - Tải thuộc tính
o.attr[ 3] - Tải các phương thức gọi
o.meth()10–20% - Lưu trữ thuộc tính
o.attr = z2% trong pyperformance - Trình tự giải nén
*seq8%
Nguồn
https://docs.python.org/3/whatsnew/3.11.html

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































