Python 3.9 có gì mới?

Bản cập nhật Python 3.9 mang lại lịch phát hành nhanh hơn, tăng hiệu suất, các hàm chuỗi mới tiện dụng, toán tử liên hợp từ điển và các API nội bộ nhất quán và ổn định hơn.

Python 3.9, được phát hành vào tháng 10/2020; 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. Ngày nay, Python đã trở nên vô cùng phát triển. Nó được sử dụng rộng rãi trong nhiều lĩnh vực; đặc biệt là khoa học dữ liệu và Machine Learning.

Dưới đây là những tính năng mới của Python 3.9.

Python chuyển sang chu kỳ phát hành hàng năm

Trước giờ, Python luôn được phát hành trong vòng 18 tháng. Tuy nhinê, PEP 602 đã đề xuất nhóm phát triển Python á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 nó sẽ phản hồi nhanh hơn về việc kiểm tra tính năng; í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 nhà quản lý 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.

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à sẽ xuất xưởng vào tháng 10 năm 2021. Các bản phát hành Python trong tương lai sẽ theo sau cùng một mô hình với Python trước đó.

Các hàm từ điển và chuỗi Python

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 các tính năng mới cho chuỗi và từ điển. Đối với chuỗi, có những 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.

Hợp nhất từ điển – Dictionary Union

Một trong những tính năng mà tôi thích nhất là cú pháp trơn. Nếu bạn có 2 từ điển a và b đang cần hợp nhất; thì bạn có thể dùng Dictionary Union để hợp nhất.

  • Điều hành hợp nhất | :

Python 3.9 có gì mới?

  • Điều hành cập nhật |= :

Python 3.9 có gì mới?

Cập nhật từ điển với vòng lặp

Nếu những từ điển của bạn chia sẻ một khóa chung – common key; một cặp giá trị chính của từ điển thứ 2 sẽ được sử dụng:

Python 3.9 có gì mới?

Nếu chúng ta thực hiện tương tự với mức điều hành hợp nhất tiêu chuẩn |; chúng ta sẽ nhận lại kết quả TypeError như sau; vì nó chỉ cho phép điều hành giữa các kiểu dict.

Chuỗi Python mới

Hai phương pháp chuỗi mới loại bỏ các tiền tố và hậu tố được thêm vào:

Python 3.9 có gì mới?

Python 3.9 nhanh hơn mặc định

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 mã 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 cuộc 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 cuộc gọi. Trong Python 3.9, một số tích hợp Python – phạm vi, tuple, set, frozenset, list, dict – sử dụng vectorcall nội bộ để tăng tốc độ thực thi.

Cải tiến thứ hai là 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 thời gian chạy CPython không được thiết kế để giải quyết các vấn đề về hiệu suất; mà là để giải quyết các 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 là phân tích cú pháp nhanh hơn; đặc biệt là đối với khối lượng lớn.

Decorator nới lỏng một số hạn chế

Trình trang trí cho phép bạn gói các hàm Python để thay đổi hành vi của chúng theo chương trình. Trước đây, trình trang trí chỉ có thể bao gồm ký hiệu @; một tên (ví dụ: func) hoặc một 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, trình trang trí 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 để giải quyết hạn chế này là tạo một hàm; hoặc biểu thức lambda sẽ thay thế cho một biểu thức phức tạp hơn khi được sử dụng làm trình trang trí. Bây giờ bất kỳ biểu thức nào cũng sẽ làm được; miễn là nó mang lại thứ gì đó có thể hoạt động như một trình trang trí.

Các hoạt động nhập mới

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 linters* và người kiểm tra mã; các loại không được thực thi trong thời gian chạy trong CPython; và không có kế hoạch biến Python thành ngôn ngữ được nhập tĩnh. 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ở mã lớn; vì vậy mã Python vẫn có thể được hưởng lợi từ việc có type hinting.

Hai tính năng mới cho type hinting và type annotation đã được đưa vào Python 3.9. Trong một, nhập gợi ý cho nội dung của các bộ sưu tập – ví dụ: danh sách và từ điển – hiện có sẵn bằng Python nguyên bản. Đ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 nhập để thực hiện.

Với phiên bản 3.5, chúng ta phải xác định rõ các kiểu của nó; nhưng điều đó rất nặng nề cho các lập trình viên.

‘Bản cập nhật mới này đã thay đổi, hãy nhìn ví dụ:

Python 3.9 có gì mới?

Trong chức năng add_int, chúng ta muốn rõ ràng để thêm vào số tương tự vào chính nó; nhưng chúng ta không biết điều đó; và hoàn toàn ổn khi thêm hai chuỗi với nhau bằng cách sử dụng +;  vì vậy không có cảnh báo nào được đưa ra.

Cái mà chúng ta có làm đó là xác định rõ loại đầu vào dự kiến là int. Sử dụng điều này, bạn có thể xử lý vấn đề ngay lập tức.

Chúng tôi có thể nhận được khá cụ thể về các loại bao gồm, ví dụ:

Type hinting có thể sử dụng ở bất cứ đâu và nhờ vào cú pháp mới nó dễ nhìn hơ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 kiểu 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 nê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 linters mã.

*công cụ dùng để phân tích source và phát hiện những lỗi sai khi viết code

Các cải tiến trong nội bộ Python

Làm sạch, tinh chỉnh và hiện đại hóa nội bộ của Python là một sáng kiến ​​liên tục dành cho các nhà phát triển Python; và Python 3.9 có một số thay đổi trong điều này.

Đầu tiên là thiết kế lại cách các mô-đun tương tác với máy móc nhập khẩu. Các mô-đun mở rộng Python; được viết bằng C, hiện có thể sử dụng cơ chế tải mới khiến chúng hoạt động giống như các 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, _contextvars, _crypt, _codecs,  _functools, _json, _locale, resource, time, operator, _weakref. Cơ chế tải 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 các khả năng mới như các hành vi nối nâng cao.

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 các mô-đun mở rộng phải được biên dịch lại cho mọi phiên bản mới. Kể 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, random, select, struct, _posixsubprocess, termios, zlib.

Trình phân tích cú pháp Python – Python Parser

Đây là một thay đổi ngoài tầm nhìn; nhưng có tiềm năng trở thành một trong những thay đổi quan trọng nhất cho sự phát triển trong tương lai của Python.

Hiện nay Python sử dụng ngữ pháp dựa vào LL(1); cái trong lượt có thể được phân tích bởi một trình cú pháp phân tích LL(1) – cái phân tích cú pháp từ trên xuống dưới; từ trái sang phải với cái nhìn chỉ một mã thông báo.

Một số vấn đề hiện tại trong Python do sử dụng phương pháp này:

  • Python chứa ngữ pháp non-LL(1), một phần ngữ pháp hiện tại sử dụng các cách giải quyết, tạo sự phức tạp không cần thiết.

  • LL(1) tạo ra sự giới hạn trong cú pháp Python (không có cách giải quyết khác). Vấn đề này nhấn mạnh rằng mã sau đây đơn giản là không thể được thực hiện bằng cách sử dụng trình phân tích cú pháp hiện tại (nâng cao SyntaxError)

  • LL(1) nghỉ với đệ quy trái (left-recursion) trong trình phân tích cú pháp. Có nghĩa là cú pháp đệ quy cụ thể có thể gây ra một vòng lặp vô hạn trong cây phân tích cú pháp.

Các thay đổi khác trong Python 3.9

Ngoài những thay đổi được trình bày ở trên, bản cập nhật Python 3.9 còn có một số thay đổi khác như:

  • Thư viện chuẩn của Python hiện hỗ trợ CSDL múi giờ IANA. CSDL cho biết được duy trì tốt và được 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ẽ là một cách tiết kiệm thời gian lớn, tốt.
  • Các 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 bản soạn sẵn 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 trừ đi tiền tố hoặc hậu tố được đề cập, miễn là chúng tồn tại trong chuỗi.

Xem thêm:

 

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *