Các tính năng mới và bản sửa lỗi tốt nhất trong Python 3. 11

Hiện có sẵn để thử nghiệm là trình thông dịch nhanh hơn, lỗi rõ ràng hơn, gợi ý loại hiệu quả hơn và rất nhiều cải tiến và tăng tốc khác

Các tính năng mới và bản sửa lỗi tốt nhất trong Python 3. 11
Bởi Serdar YegulalpSerdar Yegulalp

Nhà văn cao cấp, InfoWorld. InfoWorld.

  • Các tính năng mới và bản sửa lỗi tốt nhất trong Python 3. 11
    Bởi Serdar Yegulalp

    Nhà văn cao cấp, InfoWorld.

    python snake programming language numberssuy nghĩ

    Mục lục

    Cho xem nhiều hơn

    Ngôn ngữ lập trình Python phát hành các phiên bản mới hàng năm, với bản beta bị khóa tính năng vào nửa đầu năm và bản phát hành cuối cùng vào cuối năm

    Trăn 3. 11 vừa được phát hành và các nhà phát triển được khuyến khích dùng thử phiên bản mới nhất này trên mã phi sản xuất, vừa để xác minh rằng nó hoạt động với các chương trình của bạn vừa để biết liệu mã của bạn có được hưởng lợi từ các cải tiến hiệu suất của nó hay không

    Dưới đây là danh sách các tính năng mới quan trọng nhất trong Python 3. 11 và ý nghĩa của chúng đối với các nhà phát triển Python

    Cải thiện tốc độ

    Nhiều cải tiến hiệu suất cá nhân đã có trong Python 3. 11, nhưng bổ sung lớn nhất là trình thông dịch thích ứng chuyên dụng. Vì kiểu của một đối tượng hiếm khi thay đổi, nên trình thông dịch hiện cố gắng phân tích mã đang chạy và thay thế mã byte chung bằng kiểu cụ thể. Chẳng hạn, các phép toán nhị phân (cộng, trừ, v.v. ) có thể được thay thế bằng các phiên bản chuyên dụng cho số nguyên, số float và chuỗi

    Các cuộc gọi hàm Python cũng yêu cầu ít chi phí hơn trong Python 3. 11. Khung ngăn xếp cho các cuộc gọi chức năng hiện sử dụng ít bộ nhớ hơn và được thiết kế hiệu quả hơn. Ngoài ra, trong khi các cuộc gọi đệ quy không được tối ưu hóa theo đuôi (dù sao thì điều này có thể không khả thi trong Python), nhưng chúng hiệu quả hơn các phiên bản trước. Bản thân trình thông dịch Python cũng khởi động nhanh hơn và các mô-đun lõi cần thiết cho thời gian chạy Python được lưu trữ và tải hiệu quả hơn

    Theo bộ điểm chuẩn Python chính thức, Python 3. 11 chạy quanh 1. Nhanh hơn 25 lần so với Python 3. 10. Lưu ý rằng tốc độ tăng tốc này là một biện pháp tổng hợp. Một số thứ chạy nhanh hơn nhiều, nhưng nhiều thứ khác chỉ chạy nhanh hơn một chút hoặc gần như vậy. Tuy nhiên, phần tốt nhất về những cải tiến này là chúng miễn phí. Bạn không cần thực hiện bất kỳ thay đổi mã nào cho các chương trình Python để tận dụng lợi thế của Python 3. tăng tốc của 11

    Thông tin lỗi nâng cao

    Một tính năng hữu ích ngay lập tức khác trong Python 3. 11 là thông báo lỗi chi tiết hơn. Trăn 3. 10 đã có báo cáo lỗi tốt hơn, nhờ trình phân tích cú pháp mới được sử dụng trong trình thông dịch. Bây giờ, Python 3. 11 mở rộng về điều đó bằng cách cung cấp phản hồi chi tiết về phần cụ thể của một biểu thức đã cho gây ra lỗi

    Hãy xem xét đoạn mã sau, nó sẽ báo lỗi

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
            ~~~~^^^
    TypeError: 'int' object is not subscriptable
    
    6

    Trong Trăn 3. 10, chúng tôi sẽ nhận được thông báo lỗi sau, thông báo này không hữu ích lắm

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    

    Thay vì để chúng tôi tự hỏi

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    6 nào không thể viết được, dấu vết lỗi trong Python 3. 11 điểm đến phần chính xác của dòng tạo ra lỗi

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
            ~~~~^^^
    TypeError: 'int' object is not subscriptable
    

    Bây giờ, không có sự mơ hồ về vấn đề nằm ở đâu

    cải tiến ngoại lệ

    Ngoại lệ, cơ chế xử lý lỗi của Python, đã nhận được nhiều tính năng mới trong Python 3. 11

    • Nhiều ngoại lệ có thể được đưa ra và xử lý cùng một lúc với cú pháp
        File "C:\Python311\code.py", line 2, in 
          z = x[1][0]
      TypeError: 'int' object is not subscriptable
      
      7 mới và loại ngoại lệ
        File "C:\Python311\code.py", line 2, in 
          z = x[1][0]
      TypeError: 'int' object is not subscriptable
      
      8 mới. Điều này cho phép xử lý dễ dàng các sự cố trong đó nhiều lỗi có thể xuất hiện cùng nhau, chẳng hạn như khi xử lý các phương thức không đồng bộ hoặc đồng thời hoặc khi xử lý nhiều lỗi khi thử lại một thao tác
    • Ngoại lệ "không chi phí". Các ngoại lệ hiện không có chi phí cho một chương trình trừ khi chúng thực sự được nêu ra. Điều này có nghĩa là đường dẫn mặc định cho khối
        File "C:\Python311\code.py", line 2, in 
          z = x[1][0]
      TypeError: 'int' object is not subscriptable
      
      9 nhanh hơn và sử dụng ít bộ nhớ hơn
    • Thời gian cần thiết để bắt một ngoại lệ đã giảm khoảng 10%
    • Các ngoại lệ có thể được làm phong phú thêm bằng các ghi chú theo ngữ cảnh, tách biệt với văn bản của chính ngoại lệ đó

    cải tiến đánh máy

    Các tính năng gợi ý kiểu của Python giúp các cơ sở mã lớn dễ dàng quản lý và phân tích hơn, đồng thời đã tăng lên đáng kể sau mỗi lần sửa đổi kể từ Python 3. 5. Trăn 3. 11 mang đến một số bổ sung gợi ý kiểu mới

    Loại bản thân

    Các phương thức lớp mà trước đây

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    0 yêu cầu chú thích dài dòng và khó hiểu để có thể sử dụng được. đánh máy. Self cho phép bạn chú thích giá trị trả về của một phương thức lớp, đơn giản là,
      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    1. Bạn nhận được kết quả hữu ích và có thể dự đoán được từ các công cụ phân tích của mình cho các phương pháp đó

    Kiểu chữ chuỗi tùy ý

    Trước đây, các chú thích kiểu không có cách nào để chỉ ra một biến nhất định cần phải là một chuỗi ký tự—nghĩa là một chuỗi được xác định trong mã nguồn. kiểu gõ mới. Chú thích LiteralString khắc phục điều đó. Sử dụng chú thích mới, linters có thể kiểm tra một biến là một chuỗi được xác định trong nguồn hoặc một chuỗi mới chỉ bao gồm các chuỗi được xác định bởi nguồn

    Biến đổi lớp dữ liệu

    Kể từ Python 3. 7, các lớp dữ liệu đã làm cho việc xác định các lớp tuân theo các mẫu chung để tạo các thuộc tính dựa trên các tham số khởi tạo của chúng trở nên dễ dàng hơn. Nhưng không có cơ chế tiêu chuẩn nào cho phép những thứ hoạt động giống như lớp dữ liệu (nhưng bản thân chúng không phải là lớp dữ liệu) sử dụng chú thích kiểu để khai báo hành vi của chúng. Biến đổi lớp dữ liệu thêm trình trang trí

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    2 để chỉ ra cách một hàm, lớp hoặc siêu dữ liệu đã cho hoạt động giống như một lớp dữ liệu

    Thuốc generic biến thể

    Đề xuất ban đầu cho các gợi ý về loại bao gồm

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    0, một cách để chỉ định một chức năng chung sử dụng một loại được tham số hóa duy nhất—ví dụ: loại
      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    1 có thể là
      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    6 hoặc
      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    3. Trăn 3. 11 bổ sung thêm TypeVarTuple hoặc "variadic generics" mà bạn có thể sử dụng để chỉ định một trình giữ chỗ cho không chỉ một loại mà cả một loạt chúng, được biểu thị dưới dạng một bộ. Điều này sẽ đặc biệt hữu ích trong các thư viện như NumPy, nơi bạn có thể thực hiện kiểm tra trước các lỗi như liệu một mảng được cung cấp có đúng hình dạng hay không

    Hỗ trợ chỉ đọc TOML trong stdlib

    Python sử dụng TOML, hoặc Ngôn ngữ tối thiểu rõ ràng của Tom, làm định dạng cấu hình (như trong pyproject. toml), nhưng không thể hiện khả năng đọc các tệp định dạng TOML dưới dạng mô-đun thư viện chuẩn. Trăn 3. 11 thêm tomllib để giải quyết vấn đề đó. Lưu ý rằng

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    4 không tạo hoặc ghi tệp TOML;

    Nhóm nguyên tử và tăng tốc cho regex

    Mô-đun

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    5 của Python, để làm việc với các biểu thức chính quy, đã thiếu một số tính năng được tìm thấy trong các triển khai biểu thức chính quy khác. Một là nhóm nguyên tử, được hỗ trợ rộng rãi trong các ngôn ngữ khác. Trăn 3. 11 hiện hỗ trợ mẫu này bằng cách sử dụng cú pháp chung cho các nhóm nguyên tử (ví dụ:
      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    6)

    Công cụ khớp mẫu của mô-đun

      File "C:\Python311\code.py", line 2, in 
        z = x[1][0]
    TypeError: 'int' object is not subscriptable
    
    5 cũng đã được viết lại một chút và chạy nhanh hơn khoảng 10%

    Xóa 'pin chết' khỏi thư viện tiêu chuẩn

    PEP 594 đã bắt đầu nỗ lực loại bỏ nhiều cái gọi là pin chết, hoặc các mô-đun lỗi thời hoặc không được bảo trì, khỏi thư viện chuẩn của Python. Kể từ Python 3. 11, các thư viện đó được đánh dấu là không dùng nữa nhưng chưa bị xóa; . 13

    Python 3 khác. 11 bổ sung, sửa lỗi và thay đổi

    Nhiều cải tiến nhỏ hơn cũng đã xuất hiện trong Python 3. 11

    • Các đối tượng Python yêu cầu ít bộ nhớ hơn, vì không gian tên của chúng hiện được tạo một cách lười biếng và từ điển không gian tên của chúng hiện chia sẻ khóa bất cứ khi nào có thể
    • Các từ điển có tất cả các khóa là Unicode không còn cần lưu trữ các giá trị băm, do đó giảm kích thước của từ điển và cho phép hiệu quả bộ đệm cao hơn
    • Thời gian chạy CPython, trình thông dịch tham chiếu cho Python, hiện có hỗ trợ thử nghiệm để được biên dịch sang WebAssugging. Điều này có thể hỗ trợ sự phát triển trong tương lai của các dự án như PyScript, cho phép thời gian chạy Python do Wasm biên dịch hoạt động trong trình duyệt

    Có liên quan

    • con trăn
    • Ngôn ngữ lập trình
    • Phát triển phần mềm

    Serdar Yegulalp là một nhà văn cao cấp tại InfoWorld, tập trung vào học máy, container hóa, devops, hệ sinh thái Python và đánh giá định kỳ

    Các tính năng mới của Python 3 là gì?

    Trăn 3. 0
    Những thay đổi trong quá trình phát triển
    PEP 343. Câu lệnh 'với'
    PEP 366. Nhập khẩu tương đối rõ ràng từ một mô-đun chính
    PEP 370. Thư mục gói trang web cho mỗi người dùng
    PEP 371. Gói đa xử lý
    PEP 3101. Định dạng chuỗi nâng cao
    PEP 3105. in dưới dạng hàm

    Tại sao lại là Python 3. 11 nhanh hơn?

    Trăn 3. 11 đã thiết kế mã byte chuyên dụng để tận dụng cấu trúc dữ liệu mới . Cấu trúc dữ liệu mới + mã byte chuyên biệt = Python nhanh hơn.

    Phiên bản Python nào tốt nhất năm 2022?

    Phiên bản Python 3. 10. 4 là bản phát hành ổn định hiện tại, bản phát hành bảo trì thứ tư của Python 3. 10, xuất bản ngày 24 tháng 3 năm 2022.

    Khi nào Python 3. 11 phát hành?

    Trăn 3. 11 được xuất bản vào ngày 24 tháng 10 năm 2022 . Phiên bản Python mới nhất này nhanh hơn và thân thiện hơn với người dùng. Sau mười bảy tháng phát triển, giờ đây nó đã sẵn sàng để sử dụng vào thời gian chính. Như trong mọi phiên bản, Python 3. 11 đi kèm với rất nhiều cải tiến và thay đổi.