Bản tóm tắt. trong hướng dẫn này, bạn sẽ tìm hiểu về các gợi ý về loại python và cách sử dụng công cụ mypy để kiểm tra các loại tĩnh
Giới thiệu về gợi ý kiểu Python
Một số ngôn ngữ lập trình có kiểu gõ tĩnh, chẳng hạn như C/C++. Điều đó có nghĩa là bạn cần khai báo trước các loại biến, tham số và giá trị trả về của hàm. Các loại được xác định trước cho phép trình biên dịch kiểm tra mã trước khi biên dịch và chạy chương trình
Python sử dụng kiểu gõ động, trong đó các biến, tham số và giá trị trả về của hàm có thể là bất kỳ kiểu nào. Ngoài ra, các loại biến có thể thay đổi trong khi chương trình chạy
Nói chung, gõ động giúp lập trình dễ dàng và gây ra các lỗi không mong muốn mà bạn chỉ có thể phát hiện ra cho đến khi chương trình chạy
Gợi ý kiểu Python cung cấp cho bạn kiểu gõ tĩnh tùy chọn để tận dụng tốt nhất cả kiểu gõ tĩnh và động
Ví dụ sau định nghĩa một hàm đơn giản chấp nhận một chuỗi và trả về một chuỗi khác
Code language: Python [python]
def say_hi[name]: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Đây là cú pháp để thêm gợi ý kiểu vào tham số và giá trị trả về của hàm
parameter: type -> type
Ví dụ: phần sau đây trình bày cách sử dụng gợi ý kiểu cho tham số
7 và giá trị trả về của hàmCode language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
8Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
đầu ra
Code language: Python [python]
Hi John
Trong cú pháp mới này, tham số
7 có kiểuCode language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
0________số 8Code language: Python [python]
Hi John
Và giá trị trả về của hàm
8 cũng có kiểu làCode language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
0Code language: Python [python]
Hi John
1
parameter: type -> type
Bên cạnh loại
0, bạn có thể sử dụng các loại tích hợp khác nhưCode language: Python [python]
Hi John
4,
Hi John
Code language: Python [python]
5,Code language: Python [python]
Hi John
6 vàCode language: Python [python]
Hi John
7 cho gợi ý loạiCode language: Python [python]
Hi John
Điều quan trọng cần lưu ý là trình thông dịch Python hoàn toàn bỏ qua các gợi ý kiểu. Nếu bạn chuyển một số vào hàm
8, chương trình sẽ chạy mà không có bất kỳ cảnh báo hay lỗi nàoCode language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
8
parameter: type -> type
đầu ra
9
parameter: type -> type
Để kiểm tra cú pháp gợi ý kiểu, bạn cần sử dụng công cụ kiểm tra kiểu tĩnh
Sử dụng công cụ kiểm tra kiểu tĩnh. mypy
Python không có công cụ kiểm tra kiểu tĩnh chính thức. Hiện tại, công cụ của bên thứ ba phổ biến nhất là Mypy. Vì Mypy là gói của bên thứ ba nên bạn cần cài đặt nó bằng lệnh
9 sauCode language: Python [python]
Hi John
1Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Sau khi cài đặt
0, bạn có thể sử dụng nó để kiểm tra loại trước khi chạy chương trình bằng cách sử dụng lệnh sauCode language: Python [python]
name: str
3Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Nó sẽ hiển thị thông báo sau
0
parameter: type -> type
Lỗi chỉ ra rằng đối số của
1 làCode language: Python [python]
name: str
4 trong khi loại dự kiến làCode language: Python [python]
Hi John
0Code language: Python [python]
Hi John
Nếu bạn đổi lại đối số thành chuỗi và chạy lại
0, nó sẽ hiển thị thông báo thành côngCode language: Python [python]
name: str
1
parameter: type -> type
Nhập gợi ý & nhập suy luận
Khi xác định một biến, bạn có thể thêm một gợi ý loại như thế này
2
parameter: type -> type
Loại của biến
7 làCode language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
0. Nếu bạn gán một giá trị không phải là chuỗi cho biếnCode language: Python [python]
Hi John
7, trình kiểm tra kiểu tĩnh sẽ báo lỗi. Ví dụCode language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
3
parameter: type -> type
Lỗi
4
parameter: type -> type
Việc thêm một loại vào một biến là không cần thiết vì các trình kiểm tra loại tĩnh thường có thể suy ra loại dựa trên giá trị được gán cho biến
Trong ví dụ này, giá trị của tên là một chuỗi ký tự để trình kiểm tra kiểu tĩnh sẽ suy ra kiểu của biến tên là str. Ví dụ
5
parameter: type -> type
Nó sẽ đưa ra cùng một lỗi
4
parameter: type -> type
Thêm gợi ý loại cho nhiều loại
Hàm
8 sau đây trả về tổng của hai sốCode language: Python [python]
name: str
7
parameter: type -> type
Các số có thể là số nguyên hoặc số float. Để đặt gợi ý loại cho nhiều loại, bạn có thể sử dụng
9 từ mô-đunCode language: Python [python]
name: str
10
parameter: type -> type
Đầu tiên, nhập
9 từ mô-đunCode language: Python [python]
name: str
10
parameter: type -> type
8
parameter: type -> type
Thứ hai, sử dụng
9 để tạo một loại liên kết bao gồmCode language: Python [python]
name: str
4 vàCode language: Python [python]
Hi John
5Code language: Python [python]
Hi John
9
parameter: type -> type
Đây là mã nguồn hoàn chỉnh
0Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Bắt đầu từ Python 3. 10, bạn có thể sử dụng X. Ví dụ cú pháp Y để tạo kiểu kết hợp
1Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Nhập bí danh
Python cho phép bạn gán bí danh cho một loại và sử dụng bí danh cho các gợi ý về loại. Ví dụ
2Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Trong ví dụ này, chúng tôi chỉ định loại
16 một bí danh
parameter: type -> type
17 và sử dụng bí danh
parameter: type -> type
17 trong hàm add[]
parameter: type -> type
Thêm gợi ý loại cho danh sách, từ điển và bộ
Bạn có thể sử dụng các loại tích hợp sẵn sau đây để đặt gợi ý loại cho danh sách, từ điển và bộ
- danh sách
- mệnh lệnh
- bộ
Nếu bạn nhập gợi ý một biến dưới dạng danh sách nhưng sau đó gán từ điển cho biến đó, bạn sẽ gặp lỗi
3Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Lỗi
4Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
Để chỉ định các loại giá trị trong danh sách, từ điển và bộ, bạn có thể sử dụng bí danh loại từ mô-đun gõ
Nhập Bí danh Loại tích hợpListlistTupletupleDictdictSetsetFrozensetfrozensetSequenceĐối với danh sách, bộ dữ liệu và bất kỳ loại dữ liệu trình tự nào khác. Ánh xạĐối với từ điển [dict], set, freezeset và bất kỳ kiểu dữ liệu ánh xạ nào khácByteStringbytes, bytearray và memoryviewVí dụ, sau đây định nghĩa một danh sách các số nguyên
5Code language: Python [python]
def say_hi[name: str] -> str: return f'Hi {name}' greeting = say_hi['John'] print[greeting]
không có loại
Nếu một hàm không trả về giá trị một cách rõ ràng, bạn có thể sử dụng Không để nhập gợi ý giá trị trả về. Ví dụ