Python 3.9, được phát hành ngày 5/10, mang đến những thay đổi đáng kể đối với cả các tính năng của ngôn ngữ và cách ngôn ngữ được phát triển. Python đã trở nên phổ biến trong vài năm qua và việc sử dụng ngôn ngữ này đã thực sự bùng nổ trong các lĩnh vực có tốc độ phát triển nhanh chóng, như Data Science (khoa học dữ liệu) và Machine Learning. Dự án đang được tích cực phát triển để bắt kịp với tất cả mọi nhu cầu mới.
Dưới đây là bản tóm tắt về tất cả các tính năng mới trong Python 3.9.
Cho đến thời điểm này, Python được phát triển và phát hành theo chu kỳ 18 tháng. PEP 602 đã đề xuất rằng nhóm phát triển Python nên áp dụng chu kỳ phát hành hàng năm và đề xuất đó đã được chấp nhận.
Chu kỳ phát hành hàng năm có nghĩa là ít tính năng hơn cho mỗi bản phát hành, nhưng cũng có nghĩa là việc kiểm tra tính năng sẽ được phản hồi nhanh hơn, ít thay đổi có khả năng phá vỡ hơn cho mỗi bản phát hành, do đó, có nhiều động lực hơn cho người dùng và các trình quản lý bản phân phối Linux nâng cấp Python thường xuyên hơn. Điều đó cũng có nghĩa là các tính năng mới được đề xuất muộn trong chu kỳ phát triển sẽ không mất nhiều thời gian để đưa vào bản phát hành mới.
Timeline mới có nghĩa là Python 3.9 sẽ xuất xưởng vào tháng 10 năm 2020. Python 3.10, chính thức bắt đầu phát triển pre-alpha vào ngày 19 tháng 5 năm 2020, sẽ bước vào giai đoạn phát triển alpha khi Python 3.9 xuất xưởng và ra mắt vào tháng 10 năm 2021. Các bản phát hành Python trong tương lai sẽ tuân theo cùng một mô hình.
Python chuyển sang chu kỳ phát hành hàng năm
Mọi bản sửa đổi của Python đều được cải thiện hiệu suất so với phiên bản trước. Python 3.9 có hai cải tiến lớn giúp tăng hiệu suất mà không yêu cầu bất kỳ thay đổi nào đối với code hiện có.
Cải tiến đầu tiên liên quan đến việc sử dụng nhiều hơn giao thức vectorcall được giới thiệu trong Python 3.8. vectorcall làm cho nhiều quá trình gọi hàm phổ biến nhanh hơn bằng cách giảm thiểu hoặc loại bỏ các đối tượng tạm thời được tạo cho việc gọi. Trong Python 3.9, một số tích hợp sẵn của Python - range, tuple, set, frozenset, list, dict - sử dụng vectorcall nội bộ để tăng tốc độ thực thi.
Công cụ nâng cao hiệu suất lớn thứ hai là trình phân tích mã nguồn Python hiệu quả hơn. Trình phân tích cú pháp mới cho CPython runtime không được thiết kế để giải quyết các vấn đề về hiệu suất mà là để xử lý những mâu thuẫn nội bộ trong trình phân tích cú pháp ban đầu. Tuy nhiên, một lợi ích quan trọng khác là phân tích cú pháp nhanh hơn, đặc biệt là đối với khối lượng lớn code.
Python giúp dễ dàng thao tác với các kiểu dữ liệu phổ biến và Python 3.9 mở rộng sự dễ dàng này với những tính năng mới cho chuỗi và từ điển. Đối với chuỗi, có nhiều phương pháp mới để loại bỏ tiền tố và hậu tố, những hoạt động từ lâu đòi hỏi nhiều thao tác thủ công để thực hiện. Đối với từ điển, hiện nay có các toán tử liên hợp, một để hợp nhất hai từ điển thành một từ điển mới và một để cập nhật nội dung của từ điển này với từ điển khác.
Python 3.9 mang đến những tính năng mới cho chuỗi và từ điển
Trước đây, Decorator chỉ có thể bao gồm ký hiệu @, tên (ví dụ: func) hoặc tên có dấu chấm (func.method) và (tùy chọn) một lệnh gọi duy nhất (func.method (arg1, arg2)). Với Python 3.9, Decorator hiện có thể bao gồm bất kỳ biểu thức hợp lệ nào.
Một cách lâu đời để khắc phục hạn chế này là tạo một hàm hoặc biểu thức lambda, sẽ thay thế cho biểu thức phức tạp hơn khi được sử dụng làm Decorator. Bây giờ bất kỳ biểu thức nào cũng sẽ thực hiện được, miễn là nó mang lại thứ gì đó có thể hoạt động như một Decorator.
Trong một vài phiên bản gần đây, Python đã mở rộng hỗ trợ cho type hinting. Điều này chủ yếu là vì lợi ích của linter (công cụ dùng để phân tích source và phát hiện những lỗi sai khi viết code) và trình kiểm tra code. Nhưng type hinting là một công cụ mạnh mẽ để đảm bảo tính nhất quán trong các cơ sở code lớn, vì vậy code Python vẫn có thể được hưởng lợi từ việc có các type hint.
Hai tính năng mới cho type hinting và type annotation đã được đưa vào Python 3.9. Hãy nhập gợi ý cho nội dung của bộ sưu tập - ví dụ: danh sách và từ điển - hiện có sẵn nguyên bản trong Python. Điều này có nghĩa là bạn có thể mô tả ví dụ một danh sách dưới dạng list[int] - danh sách các số nguyên - mà không cần thư viện typing để thực hiện.
Bổ sung thứ hai cho các cơ chế nhập của Python là hàm linh hoạt và các chú thích biến. Điều này cho phép sử dụng kiểu Annotated để mô tả một loại sử dụng siêu dữ liệu, có thể được kiểm tra trước thời hạn (với các công cụ linting) hoặc trong thời gian chạy. Ví dụ: Annotated[int, ctype("char")] có thể được sử dụng để mô tả một số nguyên, được coi là kiểu char trong C. Theo mặc định, Python sẽ không làm gì với chú thích như vậy, nhưng nó có thể được sử dụng bởi các code linter.
Dọn dẹp, tinh chỉnh và hiện đại hóa nội bộ Python là một quá trình sáng tạo liên tục dành cho các nhà phát triển và Python 3.9 đã có một số thay đổi theo hướng đó.
Đầu tiên là thiết kế lại cách các mô-đun. Các mô-đun mở rộng Python, được viết bằng C, giờ đây có thể sử dụng một cơ chế load mới khiến chúng hoạt động giống như những mô-đun Python thông thường khi được nhập.
Một số mô-đun trong thư viện chuẩn của Python mới hỗ trợ hành vi này: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref. Cơ chế load mới không chỉ cho phép các mô-đun mở rộng được Python xử lý linh hoạt hơn mà còn cho phép nhiều khả năng mới.
Sáng kiến dọn dẹp thứ hai là ABI nội bộ ổn định cho CPython, một ABI được đảm bảo tồn tại trong suốt thời gian tồn tại của Python 3. Về mặt lịch sử, mỗi bản sửa đổi lớn của Python đều không tương thích ABI với các phiên bản trước, yêu cầu những mô-đun mở rộng phải được biên dịch lại cho mọi phiên bản mới. Từ bây giờ, bất kỳ mô-đun mở rộng nào sử dụng ABI ổn định sẽ hoạt động trên các phiên bản Python. Với Python 3.9, các mô-đun sau đây trong thư viện chuẩn sử dụng ABI ổn định: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib.
Thư viện chuẩn của Python hiện hỗ trợ IANA Time Zone Database (Cơ sở dữ liệu múi giờ IANA). Cơ sở dữ liệu này được duy trì tốt và sử dụng rộng rãi. Có một cách trực tiếp để sử dụng nó trong thư viện datetime của Python sẽ giúp tiết kiệm nhiều thời gian.
Những phương thức chuỗi mới cho phép dễ dàng loại bỏ các tiền tố và hậu tố. Đây là một trong những tình huống sử dụng phổ biến, hàng ngày yêu cầu quá nhiều boilerplate so với mức cần thiết. Các phương thức .removeprefix() và .removesuffix() mới trả về bản sao đã sửa đổi của một chuỗi, bỏ đi tiền tố hoặc hậu tố được đề cập, miễn là chúng tồn tại trong chuỗi.
Devmaster Academy via quantrimang