2.17. Gợi ý kiểu dữ liệu¶
Python cho phép bạn chú thích các tham số hàm và giá trị trả về với thông tin kiểu dữ liệu. Các chú thích bị bỏ qua khi chạy -- không có gì kiểm tra chúng, không có gì chuyển đổi dựa trên chúng -- nhưng chúng đóng vai trò như tài liệu cho người đọc và cho IDE.
2.17.1. Cú pháp chú thích¶
Chú thích tham số đứng sau dấu hai chấm. Kiểu trả về đứng sau -> và trước dấu hai chấm của thân hàm:
def greet(name: str) -> None:
print("hello,", name)
def add(a: int, b: int) -> int:
return a + b
def average(values: list) -> float:
return sum(values) / len(values)
Các gợi ý mô tả những gì nên được truyền vào và những gì sẽ được trả về. Việc gọi add("hi", "there") không ném ra lỗi -- Python vẫn chạy thân hàm. Các gợi ý là một hợp đồng, không phải một kiểm tra.
Một tham số có thể có cả giá trị mặc định lẫn chú thích:
def greet(name: str, greeting: str = "hello") -> None:
print(greeting, name)
CPython có ký hiệu phong phú hơn (Optional, Union, generics) thông qua mô-đun typing, nhưng chúng nặng nề trên MicroPython và hiếm khi cần thiết cho mã camera thông thường.
2.17.2. MicroPython khi chạy¶
MicroPython phân tích cú pháp các chú thích và sau đó bỏ qua chúng. Không có mô-đun typing để import trên camera; cố gắng dùng Optional[int] hoặc list[int] sẽ thất bại khi import hoặc im lặng hoạt động như truy cập thuộc tính thông thường, tùy thuộc vào bản build firmware.
Chỉ dùng tên kiểu đơn giản (int, float, str, bool, bytes, list, tuple, dict) trong các chú thích. Chúng không tốn gì khi chạy và truyền đạt ý định một cách rõ ràng.
2.17.3. Cách IDE sử dụng chúng¶
IDE đọc các chú thích để cung cấp tooltip, tự động hoàn thành và gợi ý nội tuyến. Một hàm được chú thích với -> int hiển thị int là kiểu trả về khi con trỏ di chuột qua lời gọi. Một tham số được chú thích với : str tự động hoàn thành các phương thức chuỗi trên đối số bên trong thân hàm.
Đây là lợi ích thực tế của việc viết chú thích trên một runtime bỏ qua chúng: hỗ trợ tốt hơn từ trình soạn thảo mà hoàn toàn không có chi phí khi tập lệnh chạy trên camera.
2.17.4. Chú thích biến¶
Các chú thích trên các phép gán thông thường hoạt động theo cùng một cách:
threshold: float = 0.5
name: str = "OpenMV"
Chúng cũng bị bỏ qua khi chạy. Cách dùng chính của chúng là làm rõ kiểu dự định khi vế phải không làm điều đó -- thường là khi giá trị ban đầu là một giá trị giữ chỗ sẽ được thay thế sau.