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-namenhanh 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! ????

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng