Nhập gợi ý, chú thích thay đổi và kiểm tra loại thời gian chạy - mọi thứ bạn cần biết.
Python là một ngôn ngữ được đánh máy động - tôi chắc chắn bạn biết điều đó. Điều này làm cho nó dễ dàng và thú vị cho người mới bắt đầu, vì ở đó, không cần phải nghĩ về các loại dữ liệu. Tuy nhiên, gõ tĩnh có một số lợi ích. Hôm nay chúng tôi sẽ khám phá cách làm Python được đánh máy tĩnh nhất có thể.
Vì vậy, những gì mà thỏa thuận với các ngôn ngữ được đánh máy động? Tóm lại, điều đó có nghĩa là không có bộ biên dịch mã nào, vì vậy trình thông dịch Python thực hiện kiểm tra loại khi mã chạy. Do đó, các loại biến được phép thay đổi trong toàn bộ ứng dụng.
Nghe có vẻ như là một lợi thế, nhưng nó có thể dẫn đến các lỗi kỳ lạ và khó theo dõi khi cơ sở mã trở nên lớn hơn.
Mặt khác, các ngôn ngữ được gõ tĩnh thực hiện kiểm tra loại khi biên dịch [nghĩ C hoặc Java]. Hơn nữa, họ cung cấp cho bạn một số cảm giác an toàn, vì bạn có thể ngay lập tức cho biết loại tham số đi vào từng hàm.
Chỉ là một từ chối trách nhiệm nhanh trước khi chúng ta bắt đầu - Python sẽ luôn là một ngôn ngữ được đánh máy động. Không có gì bạn có thể làm để làm cho nó tĩnh như Java hoặc C. Pep 484 đã giới thiệu các gợi ý loại, vì vậy chúng tôi sẽ phải làm việc với điều đó.disclaimer before we start — Python will always be a dynamically typed language. There’s nothing you can do to make it static as Java or C. PEP 484 introduced type hints, so we’ll have to work with that.
Bài viết được cấu trúc như sau:
- Loại gợi ý
- Chú thích biến
- Biểu thị các loại dữ liệu nâng cao hơn
- Buộc kiểm soát loại khi chạy
- Sự kết luận
Loại gợi ý
Chú thích biến
Biểu thị các loại dữ liệu nâng cao hơn
def sum_numbers[a, b]:
return a + b
print[sum_numbers[10, 5]]
print[sum_numbers[10.3, 5]]
print[sum_numbers['Bob', 'Mark']]
Buộc kiểm soát loại khi chạy
- Sự kết luận
- Loại gợi ý chỉ là như vậy - gợi ý. Họ cho bạn thấy kiểu dữ liệu nào được mong đợi, nhưng không có gì ngăn cản bạn bỏ qua chúng. Sau đó, chúng tôi sẽ khám phá cách buộc kiểm tra loại bởi phiên dịch viên Python, nhưng trước tiên hãy để che đậy những điều cơ bản.
Hãy để làm một ví dụ mà không có gợi ý loại. Dưới đây là một hàm được thiết kế để thêm hai số và trả lại tổng. Python là Python, chúng tôi không phải chỉ định các loại dữ liệu cho các tham số cũng như giá trị trả về:
def sum_numbers[a: int, b: int] -> int:
return a + b
print[sum_numbers[10, 5]]
print[sum_numbers[10.3, 5]]
print[sum_numbers['Bob', 'Mark']]
Các kết quả được in từ các cuộc gọi chức năng lần lượt là 15, 15.3 và Bobmark. Để giới thiệu các gợi ý loại, chúng tôi phải làm như sau:
Đối với các tham số - Đặt dấu hiệu ruột kết [:] ngay sau tên tham số và chỉ định kiểu dữ liệu sau
- Đối với giá trị trả về - Đặt dấu hiệu mũi tên và kiểu dữ liệu ngay sau dấu ngoặc đơn
- Tại đây, cách thêm gợi ý loại vào chức năng
sum_numbers
của chúng tôi: - Chức năng rõ ràng hơn một chút để xem xét bây giờ, nhưng chúng ta vẫn có thể vượt qua bất kỳ loại dữ liệu nào - chỉ ra rằng gợi ý chỉ là gợi ý, không phải là một nghĩa vụ.
Dưới đây là các khuyến nghị gợi ý loại, theo PEP 8:force type checks later.
Chú thích biến
Biểu thị các loại dữ liệu nâng cao hơn
Buộc kiểm soát loại khi chạy
name: str = 'Bob'
age: int = 32
rating: float = 7.9
is_premium: bool = True
Sự kết luận
Biểu thị các loại dữ liệu nâng cao hơn
Buộc kiểm soát loại khi chạy
Sự kết luận
Loại gợi ý chỉ là như vậy - gợi ý. Họ cho bạn thấy kiểu dữ liệu nào được mong đợi, nhưng không có gì ngăn cản bạn bỏ qua chúng. Sau đó, chúng tôi sẽ khám phá cách buộc kiểm tra loại bởi phiên dịch viên Python, nhưng trước tiên hãy để che đậy những điều cơ bản.
from typing import List, Dict
names: List[str] = ['Bob', 'Mark', 'Jack']
emails: Dict[str, str] = {
'Bob': '',
'Mark': '',
'Jack': ''
}
Hãy để làm một ví dụ mà không có gợi ý loại. Dưới đây là một hàm được thiết kế để thêm hai số và trả lại tổng. Python là Python, chúng tôi không phải chỉ định các loại dữ liệu cho các tham số cũng như giá trị trả về:
def list_summation[lst: List[int]] -> int:
return sum[lst]
Các kết quả được in từ các cuộc gọi chức năng lần lượt là 15, 15.3 và Bobmark. Để giới thiệu các gợi ý loại, chúng tôi phải làm như sau:
Buộc kiểm soát loại khi chạy
Sự kết luận
Loại gợi ý chỉ là như vậy - gợi ý. Họ cho bạn thấy kiểu dữ liệu nào được mong đợi, nhưng không có gì ngăn cản bạn bỏ qua chúng. Sau đó, chúng tôi sẽ khám phá cách buộc kiểm tra loại bởi phiên dịch viên Python, nhưng trước tiên hãy để che đậy những điều cơ bản.
Hãy để làm một ví dụ mà không có gợi ý loại. Dưới đây là một hàm được thiết kế để thêm hai số và trả lại tổng. Python là Python, chúng tôi không phải chỉ định các loại dữ liệu cho các tham số cũng như giá trị trả về:
def add_numbers[a: int, b: int] -> int:
return a + b
print[add_numbers[10, 5]]
print[add_numbers[10.3, 5]]
print[add_numbers['Bob', 'Mark']]
Các kết quả được in từ các cuộc gọi chức năng lần lượt là 15, 15.3 và Bobmark. Để giới thiệu các gợi ý loại, chúng tôi phải làm như sau:
Đối với giá trị trả về - Đặt dấu hiệu mũi tên và kiểu dữ liệu ngay sau dấu ngoặc đơn
Như bạn có thể thấy, chương trình bị sập. Chỉ là hành vi chúng tôi muốn, vì hàm này mong đợi hai số nguyên, nhưng chúng tôi đã không cung cấp các loại dữ liệu đó trong các cuộc gọi chức năng.
Và đó là tất cả những gì bạn nên biết để bắt đầu. Hãy để bọc mọi thứ trong phần tiếp theo.
Chia tay từ
Hãy cùng kết thúc bài viết này với một vài ưu và nhược điểm của việc sử dụng gợi ý loại.
Pros:
- Họ giúp ghi lại mã của bạn - không phải là sự thay thế cho các tài liệu
- Họ giúp duy trì cơ sở mã sạch hơn - vì những lý do rõ ràng
- Họ cải thiện khả năng lót của trình chỉnh sửa mã của bạn - ví dụ, Pycharm sẽ hiển thị cảnh báo nếu phát hiện không phù hợp loại
Cons:
- Có thể tẻ nhạt để thêm - đặc biệt nếu bạn không quen với họ
Để kết luận - không cần phải gợi ý loại nhưng là thực tiễn tốt, đặc biệt là khi làm việc trên các cơ sở mã lớn - ngay cả khi bạn quyết định không sử dụng
def sum_numbers[a: int, b: int] -> int:
return a + b
print[sum_numbers[10, 5]]
print[sum_numbers[10.3, 5]]
print[sum_numbers['Bob', 'Mark']]
2.Suy nghĩ của bạn về gợi ý loại là gì? Bạn có luôn sử dụng chúng, hoặc chỉ khi cơ sở mã trở nên lớn hơn? Hãy cho tôi biết trong phần bình luận dưới đây.