Phát hành ngôn ngữ lập trình Python 3.10

Sau một năm phát triển, bản phát hành quan trọng của ngôn ngữ lập trình Python 3.10 đã được trình làng. Chi nhánh mới sẽ được hỗ trợ trong một năm rưỡi, sau đó trong ba năm rưỡi nữa, các bản sửa lỗi sẽ được tạo ra để loại bỏ các lỗ hổng bảo mật.

Đồng thời, thử nghiệm alpha của nhánh Python 3.11 đã bắt đầu (theo lịch phát triển mới, công việc trên nhánh mới bắt đầu năm tháng trước khi phát hành nhánh trước đó và đạt đến giai đoạn thử nghiệm alpha vào thời điểm phát hành tiếp theo ). Nhánh Python 3.11 sẽ ở dạng bản phát hành alpha trong bảy tháng, trong thời gian đó các tính năng mới sẽ được bổ sung và sửa lỗi. Sau đó, các phiên bản beta sẽ được thử nghiệm trong ba tháng, trong thời gian đó việc bổ sung các tính năng mới sẽ bị cấm và mọi sự chú ý sẽ tập trung vào việc sửa lỗi. Trong hai tháng cuối cùng trước khi phát hành, chi nhánh sẽ ở giai đoạn ứng cử viên phát hành, tại đó quá trình ổn định cuối cùng sẽ được thực hiện.

Các bổ sung mới cho Python 3.10 bao gồm:

  • Đã triển khai các toán tử "khớp" và "trường hợp" để khớp mẫu, giúp cải thiện khả năng đọc mã, đơn giản hóa việc khớp các đối tượng Python tùy ý và tăng độ tin cậy của mã thông qua kiểm tra kiểu tĩnh nâng cao. Việc triển khai rất giống với toán tử "khớp" được cung cấp trong Scala, Rust và F#, so sánh kết quả của một biểu thức đã chỉ định với danh sách các mẫu được liệt kê trong các khối dựa trên toán tử "case".

    def http_error(status): trạng thái khớp: trường hợp 400: return “Yêu cầu không hợp lệ” trường hợp 401|403|404: return “Không được phép” trường hợp 418: return “Tôi là ấm trà” trường hợp _: return “Thứ khác”

    Bạn có thể giải nén các đối tượng, bộ dữ liệu, danh sách và chuỗi tùy ý để liên kết các biến dựa trên các giá trị hiện có. Được phép xác định các mẫu lồng nhau, sử dụng các điều kiện “if” bổ sung trong mẫu, sử dụng mặt nạ (“[x, y, *rest]”), ánh xạ khóa/giá trị (ví dụ: {“băng thông”: b, “độ trễ ”: l} để trích xuất các giá trị "băng thông" và "độ trễ" từ từ điển), trích xuất các mẫu con (":=" toán tử), sử dụng các hằng số được đặt tên trong một mẫu. Trong các lớp, có thể tùy chỉnh hành vi khớp bằng cách sử dụng phương thức “__match__()”.

    từ các lớp dữ liệu nhập lớp dữ liệu @dataclass lớp Điểm: x: int y: int def Whereis(point): điểm khớp: case Điểm(0, 0): print("Origin") case Điểm(0, y): print(f" trường hợp Y={y}") Điểm(x, 0): print(f"X={x}") trường hợp Điểm(): print("Nơi nào khác") trường hợp _: print("Không phải là điểm") khớp điểm: trường hợp Điểm(x, y) if x == y: print(f"Y=X at {x}") trường hợp Điểm(x, y): print(f"Không nằm trên đường chéo") ĐỎ, XANH, XANH = 0, 1, 2 màu khớp: trường hợp ĐỎ: in(“Tôi thấy màu đỏ!”) trường hợp XANH: in(“Cỏ xanh”) trường hợp XANH: in(“Tôi cảm thấy buồn :(“)

  • Giờ đây, bạn có thể sử dụng dấu ngoặc đơn trong câu lệnh with để phân chia định nghĩa của một tập hợp các trình quản lý bối cảnh trên nhiều dòng. Nó cũng được phép để lại dấu phẩy sau trình quản lý bối cảnh cuối cùng trong nhóm: với ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): ...
  • Cải thiện báo cáo về vị trí mã của các lỗi liên quan đến dấu ngoặc nhọn và dấu ngoặc kép không được đóng trong chuỗi ký tự. Ví dụ: khi có một dấu ngoặc nhọn không đóng, thay vì báo cáo lỗi cú pháp trong cấu trúc sau, con trỏ bây giờ sẽ đánh dấu dấu ngoặc mở và cho biết rằng không có khối đóng. Tệp "example.py", dự kiến ​​dòng 1 = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' chưa bao giờ đóng cửa

    Đã thêm các thông báo lỗi cú pháp chuyên biệt bổ sung: thiếu ký hiệu ://: thiếu ký hiệu ://trước một khối và trong từ điển, không phân tách một bộ bằng dấu ngoặc đơn, thiếu dấu phẩy trong danh sách, chỉ định khối "thử" mà không có "ngoại trừ" và "cuối cùng", sử dụng "= " thay vì "= =" khi so sánh, chỉ định biểu thức * trong chuỗi f. Ngoài ra, nó đảm bảo rằng toàn bộ biểu thức có vấn đề được đánh dấu chứ không chỉ phần đầu và thông tin rõ ràng hơn về ngữ cảnh của các lỗi liên quan đến việc thụt lề không chính xác. >>> def foo(): … if lel: … x = 2 File “”, dòng 3 x = 2 ^ IndentationError: mong đợi một khối thụt lề sau câu lệnh ‘if’ ở dòng 2

    Trong các lỗi do lỗi chính tả trong tên thuộc tính và tên biến trong hàm, một đề xuất có tên chính xác sẽ được đưa ra. >>> bộ sưu tập.namedtoplo TracBack (cuộc gọi gần đây nhất gần đây nhất): Tệp "", dòng 1, trong AttributionError: mô-đun 'bộ sưu tập' không có thuộc tính 'namedtoplo'. Có phải ý bạn là: có têntuple?

  • Đối với các công cụ gỡ lỗi và trình lược tả, các sự kiện theo dõi được cung cấp số dòng chính xác của mã được thực thi.
  • Đã thêm cài đặt sys.flags.warn_default_encoding để hiển thị cảnh báo về các lỗi tiềm ẩn liên quan đến TextIOWrapper và open() xử lý các tệp được mã hóa UTF-8 mà không chỉ định rõ ràng tùy chọn 'encoding="utf-8"' (mã hóa ASCII được sử dụng theo mặc định). Bản phát hành mới cũng cung cấp khả năng chỉ định giá trị 'encoding="locale"' để đặt mã hóa dựa trên ngôn ngữ hiện tại.
  • Một toán tử mới đã được thêm vào mô-đun gõ, cung cấp các công cụ để chỉ định chú thích kiểu, cho phép sử dụng cú pháp “X | Y" để chọn một trong các loại (loại X hoặc loại Y). hình vuông def(số: int | float) -> int | float: return number ** 2 tương đương với cấu trúc được hỗ trợ trước đó: def Square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • Toán tử Concatenate và biến ParamSpec đã được thêm vào mô-đun gõ, cho phép bạn chuyển thông tin bổ sung để kiểm tra loại tĩnh khi sử dụng Callable. Mô-đun gõ cũng thêm các giá trị đặc biệt TypeGuard để chú thích các chức năng bảo vệ loại và TypeAlias ​​để xác định rõ ràng bí danh loại. StrCache: TypeAlias ​​​​= ‘Cache[str]’ # một bí danh loại
  • Hàm zip() triển khai một cờ "nghiêm ngặt" tùy chọn, khi được chỉ định, sẽ kiểm tra xem các đối số được lặp có cùng độ dài hay không. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (cuộc gọi gần đây nhất gần đây nhất ): … ValueError: zip() đối số 2 dài hơn đối số 1
  • Các hàm dựng sẵn mới aiter() và anext() được đề xuất cùng với việc triển khai các hàm tương tự không đồng bộ với các hàm iter() và next().
  • Công việc của các hàm tạo str(), bytes() và bytearray() khi làm việc với các đối tượng nhỏ đã được tăng tốc 30-40%.
  • Giảm số lượng thao tác nhập trong mô-đun runpy. Lệnh "python3 -m module_name" hiện chạy nhanh hơn trung bình 1.4 lần do giảm số mô-đun đã nhập từ 69 xuống 51.
  • Lệnh LOAD_ATTR sử dụng cơ chế lưu vào bộ nhớ đệm cho các opcode riêng lẻ, giúp tăng tốc độ làm việc với các thuộc tính thông thường lên tới 36% và với các vị trí lên tới 44%.
  • Khi xây dựng Python với tùy chọn “--enable-optimizations”, chế độ “-fno-semantic-interposition” hiện đã được bật, cho phép tăng tốc trình thông dịch lên tới 30% so với xây dựng bằng “--enable-shared " lựa chọn.
  • Các mô-đun hashlib và ssl đã thêm hỗ trợ cho OpenSSL 3.0.0 và ngừng hỗ trợ các phiên bản OpenSSL cũ hơn 1.1.1.
  • Trình phân tích cú pháp cũ đã bị xóa và được thay thế trong nhánh trước bằng trình phân tích cú pháp PEG (Ngữ pháp biểu thức phân tích cú pháp). Mô-đun định dạng đã bị loại bỏ. Tham số vòng lặp đã bị xóa khỏi API asyncio. Các phương thức trước đây không được dùng nữa cũng đã bị xóa. Các hàm Py_UNICODE_str* thao tác chuỗi Py_UNICODE* đã bị xóa.
  • Mô-đun distutils không được dùng nữa và được lên lịch xóa trong Python 3.12. Thay vì sử dụng distutils, bạn nên sử dụng các mô-đun setuptools, Packaging, Platform, Shutil, Subprocess và sysconfig. Cấu trúc wstr trong PyUnicodeObject không còn được dùng nữa và đã được lên lịch xóa.

Nguồn: opennet.ru

Thêm một lời nhận xét