Gợi ý kiểu Python: Gõ và chú thích tĩnh

Tìm hiểu cách viết gợi ý kiểu bằng Python. Cải thiện chất lượng mã, bật tính năng tự động hoàn thành và tận dụng mypy để phân tích mã tĩnh.

Thử trong Trình chỉnh sửa

Tổng quan

Python về mặt lịch sử là một ngôn ngữ được gõ động, có nghĩa là trình thông dịch suy ra các loại biến trong thời gian chạy, mang lại cho các nhà phát triển tốc độ và tính linh hoạt. Tuy nhiên, khi cơ sở mã phát triển, tính linh hoạt được nhập động này có thể dẫn đến các lỗi thời gian chạy khó hiểu—chẳng hạn như chuyển danh sách tới hàm yêu cầu một chuỗi. Để thu hẹp khoảng cách này,Python 3.5 đã giới thiệu Gợi ý loại (Chú thích loại), cho phép các nhà phát triển ghi lại rõ ràng các loại dự kiến ​​trong mã.

Gợi ý nhập không ảnh hưởng đến cách Python chạy mã của bạn; trình thông dịch hoàn toàn bỏ qua chúng khi chạy. Thay vào đó, giá trị của chúng nằm ở công cụ phân tích tĩnh và IDE. Bằng cách thêm chú thích kiểu vào biến, tham số hàm và kiểu trả về, IDE của bạn có thể cung cấp khả năng tự động hoàn thành chính xác và gắn cờ ngay lập tức cho các lỗi không khớp loại. Các công cụ như `mypy` có thể quét cơ sở mã của bạn trước khi triển khai để phát hiện lỗi tĩnh, bắt chước quá trình kiểm tra thời gian biên dịch của các ngôn ngữ như TypeScript hoặc Java.

Khả năng gõ của Python rất phong phú. Bạn có thể chú thích các loại cơ bản như `str`, `int` và `bool` hoặc sử dụng các loại nâng cao từ mô-đun `typing` tích hợp sẵn (hoặc các bộ sưu tập tiêu chuẩn trongPython 3.9+) như `list[str]`, `dict[str, int]` và `tuple[float, float]`. Các tính năng như `Union` (hoặc toán tử đường ống `|` trongPython 3.10+) cho phép tham số chấp nhận nhiều loại, trong khi `Tùy chọn[T]` đại diện cho một giá trị có thể là một loại cụ thể hoặc `Không có`. Việc triển khai gợi ý loại cải thiện đáng kể khả năng đọc và cộng tác nhóm.

Đầu ra mã & thực thi

Viết một hàm có chú thích kiểu và kiểm tra cách nó chấp nhận đầu vào.

# Type annotations for function parameters and return values
def greeting(name: str, count: int) -> str:
    return f"Hello {name}! " * count

# Type hints on standard collections (Python 3.9+)
user_roles: dict[str, str] = {
    "admin": "Alice",
    "moderator": "Bob"
}

message = greeting("Jane", 2)
print(message)
print(f"Roles configured: {user_roles}")
Đầu ra thiết bị đầu cuối
Hello Jane! Hello Jane! 
Roles configured: {'admin': 'Alice', 'moderator': 'Bob'}

Triển khai từng bước

  • Ngăn chặn lỗi tích hợp trong cơ sở mã nhóm lớn
  • Cho phép hoàn thành mã IDE trong các dự án mã phức tạp
  • Tạo cấu trúc API tự ghi tài liệu và lược đồ xác thực

Câu hỏi thường gặp

Gợi ý loại có thực thi an toàn loại trong thời gian chạy không?

Không. Python không đưa ra các ngoại lệ lỗi nếu bạn chuyển một loại khác với gợi ý được chú thích. Để thực thi việc kiểm tra kiểu, bạn phải chạy trình kiểm tra tĩnh như mypy.

Sự khác biệt giữa Any và Union là gì?

Any vô hiệu hóa việc kiểm tra kiểu cho một biến, cho phép nó giữ bất cứ thứ gì. Union (hoặc T | U) giới hạn biến ở một tập hợp con cụ thể, được xác định của các loại.

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.