Có gì mới trong Python 3.11

Feb 20 2023
Trăn 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 print len[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