Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Các tính năng mới trong Python 3.10
Python 3.10 mang đến một loạt các tính năng mới và cải tiến, giúp việc lập trình trở nên mạnh mẽ, hiệu quả và trực quan hơn. Từ cú pháp so khớp cấu trúc mới cho đến các thông báo lỗi chi tiết, phiên bản này không chỉ tập trung vào việc mở rộng khả năng ngôn ngữ mà còn tối ưu hóa trải nghiệm của lập trình viên. Hơn thế nữa, các cải tiến như hiệu năng được tăng tốc, hỗ trợ viết kiểu dữ liệu trực quan hơn, và nâng cấp bảo mật hứa hẹn sẽ tạo nên bước tiến lớn cho cộng đồng Python. Hãy cùng tìm hiểu những thay đổi quan trọng nhất trong phiên bản này!
Structural Pattern Matching trong Python
Cú pháp mới match-case
giúp so sánh một biến với các giá trị hoặc mẫu khác nhau, tương tự như switch/case
trong các ngôn ngữ như C hoặc JavaScript. Tuy nhiên, Python cho phép so khớp với các cấu trúc phức tạp hơn như thuộc tính của đối tượng.
Cú pháp:
match subject: case <pattern_1>: <action_1> case <pattern_2>: <action_2> case _: <default_action>
Ví dụ 1:
def http_error(status): match status: case 400: return "Yêu cầu không hợp lệ" case 401 | 403: return "Không được phép" case 404: return "Không tìm thấy" case 418: return "Tôi là ấm trà" case _: return "Có lỗi xảy ra"
Cú pháp này cho phép:
Bài viết này được đăng tại [free tuts .net]
- Kết hợp nhiều giá trị trong một mẫu bằng toán tử
|
. - Sử dụng
_
làm trường hợp mặc định khi không có mẫu nào khớp.
Ví dụ 2: So khớp cấu trúc:
# point là một tuple (x, y) match point: case (0, 0): print("Điểm gốc tọa độ") case (0, y): print(f"x=0, y={y}") case (x, 0): print(f"x={x}, y=0") case (x, y): print(f"x={x}, y={y}") case _: raise ValueError("Không phải là điểm hợp lệ")
Bạn cũng có thể sử dụng các điều kiện bổ sung (guard) để ràng buộc mẫu chi tiết hơn.
Parenthesized Context Managers trong Python
Python 3.10 hỗ trợ dùng dấu ngoặc đơn để viết nhiều context manager trên nhiều dòng, giúp mã dễ đọc hơn:
with ( open("file1.txt") as f1, open("file2.txt") as f2 ): # Thao tác với f1, f2
Tham Số strict
Cho Hàm zip()
trong Python
Thêm tham số strict
(boolean) vào hàm zip()
. Nếu strict=True
, zip()
sẽ kiểm tra chiều dài của các iterable và báo lỗi nếu chúng không bằng nhau.
Ví dụ:
names = ['An', 'Bình', 'Chi'] ages = [25, 30] # Bình thường, zip() sẽ dừng ở iterable ngắn hơn print(list(zip(names, ages))) # Output: [('An', 25), ('Bình', 30)] # Với strict=True print(list(zip(names, ages, strict=True))) # ValueError: zip() argument 2 is shorter than argument 1
Thông báo lỗi rõ ràng hơn trong Python
Python 3.10 cải thiện thông báo lỗi, chỉ ra nguyên nhân cụ thể và vị trí lỗi chi tiết hơn.
Ví dụ: Thiếu dấu ngoặc:
print("Hello" print("World")
Python 3.9:
File "example.py", line 2 print("World") ^ SyntaxError: invalid syntax
Python 3.10:
File "example.py", line 1 print("Hello" ^ SyntaxError: '(' chưa được đóng
Một số thông báo lỗi cải thiện khác:
- Thiếu
:
:"SyntaxError: expected ':'"
- Thiếu dấu phẩy:
"SyntaxError: invalid syntax. Perhaps you forgot a comma?"
- Lỗi thụt dòng:
def foo(): if x: y = 2
Python 3.10:
IndentationError: expected an indented block after 'if' statement in line 2
Các tính năng mới liên quan đến Typing trong Python
Viết Kiểu Union Dạng X | Y
Thay vì dùng Union
, bạn có thể dùng |
để chỉ kiểu dữ liệu kết hợp:
# Cách cũ from typing import Union def square(number: Union[int, float]) -> Union[int, float]: return number ** 2 # Cách mới def square(number: int | float) -> int | float: return number ** 2
Toán tử |
cũng được hỗ trợ trong isinstance()
và issubclass()
:
isinstance(1, int | str) # True
TypeAlias
Thêm giá trị đặc biệt TypeAlias
trong typing
để khai báo rõ ràng các alias kiểu dữ liệu:
from typing import TypeAlias StrCache: TypeAlias = "Cache[str]"
Yêu Cầu OpenSSL 1.1.1 Trở Lên
Python 3.10 yêu cầu OpenSSL 1.1.1 hoặc mới hơn để tăng cường bảo mật. Các phiên bản cũ như OpenSSL 1.0.2 không còn được hỗ trợ.
Deprecate distutils
Module distutils
chính thức bị loại bỏ và sẽ không còn trong Python 3.12. Người dùng được khuyến khích chuyển sang setuptools
và các công cụ khác.
Tối ưu hiệu suất
- Hàm khởi tạo nhanh hơn:
str()
,bytes()
,bytearray()
tăng tốc 30–40% cho các đối tượng nhỏ. - Thời gian khởi động nhanh hơn: Python 3.10 giảm số lượng module được import mặc định, giúp lệnh
python3 -m module-name
nhanh hơn 1.4 lần.
Kết bài
Python 3.10 mang lại nhiều tính năng mới và cải tiến đáng chú ý, đặc biệt là cú pháp Structural Pattern Matching và các thông báo lỗi rõ ràng hơn. Đây là một phiên bản tập trung vào hiệu năng và trải nghiệm lập trình viên, giúp tiết kiệm thời gian và cải thiện quy trình phát triển.
Nếu bạn thấy bài viết hữu ích, hãy chia sẻ và thử trải nghiệm các tính năng mới ngay hôm nay! ????