Đúng là hàm trả về một def get_sales_summary() -> dict: ...6, nhưng đó là một kiểu không đầy đủ. Sử dụng def get_sales_summary() -> dict: ...6 mà không có bất kỳ tham số nào tương đương với sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])0 và. Điều này có nghĩa là các khóa và giá trị của def get_sales_summary() -> dict: ...6 trả về của chúng tôi sẽ không được kiểm tra loại trong trình gọi Show
Ví dụ: Mypy sẽ không thấy bất kỳ vấn đề nào với mã này sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"]) Nhưng nó gặp sự cố với một sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])3 $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str Rất tiếc. Hãy thoát khỏi điều đó sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])1 Được rồi, còn sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"]) 5 thì sao?Chúng tôi có thể cải thiện chỉ trên def get_sales_summary() -> dict: ...6 bằng cách tham số hóa các loại khóa và giá trị của nó def get_sales_summary() -> dict: ...0 Bây giờ chúng tôi đang khai báo chính xác loại khóa là sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])7, điều này thật tuyệt Vì các giá trị trả về có nhiều loại khác nhau nên việc sử dụng sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])8 là đúng về mặt kỹ thuật. Nó truyền đạt “điều này có thể là bất cứ điều gì” tốt hơn sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])1. Nhưng nó quá hạn chế và các loại giá trị hiện không xác định tại các trang web cuộc gọi Ví dụ: lấy mã này def get_sales_summary() -> dict: ...4 Mypy không thể nói rằng $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str0 là một $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str1, vì vậy nó phát sinh lỗi def get_sales_summary() -> dict: ...7 Để khai báo đúng loại giá trị, chúng ta cần sử dụng , ví dụ def get_sales_summary() -> dict: ...8 Điều này không hữu ích lắm vì nó đặt gánh nặng của các loại chính xác khỏi hàm vào các trang gọi. Ngoài ra, $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str3 chưa được xác minh, vì vậy chúng tôi vẫn có thể gặp lỗi loại Được rồi, $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str 4 ?Chúng ta có thể sử dụng toán tử kết hợp đánh máy, $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str5, để khai báo các loại giá trị có thể sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])2 Điều này ràng buộc các giá trị của chúng tôi là $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str1 hoặc sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])7 hoặc $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str8]. Loại liên kết chính xác hơn sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])8, cho phép các loại khác nhau vô hạn theo nghĩa đen. Nhưng nó có một nhược điểm - trình kiểm tra loại phải giả sử mỗi giá trị có thể là bất kỳ loại nào được kết hợp Ví dụ: chúng tôi có thể thử sử dụng lại ________ 100 làm ________ 61 def get_sales_summary() -> dict: ...4 Nhưng mypy cho chúng tôi biết rằng phép chia sẽ không hoạt động trong trường hợp $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str0 có thể là sales_summary = get_sales_summary() print("Sales:" + sales_summary["sales"])7 hoặc def get_sales_summary() -> dict: ...04 def get_sales_summary() -> dict: ...0 Một lần nữa, chúng ta cần sử dụng một $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str3 khó chịu def get_sales_summary() -> dict: ...8 Điều này đi kèm với các vấn đề tương tự như trước đây Aha - một def get_sales_summary() -> dict: ... 06Bây giờ chúng tôi đến giải pháp trong tiêu đề. cho phép chúng tôi khai báo cấu trúc cho các def get_sales_summary() -> dict: ...6, ánh xạ các khóa (chuỗi) của chúng với các loại giá trị của chúng def get_sales_summary() -> dict: ...06 đã được chỉ định trong PEP 589 và được giới thiệu trong Python 3. 8. Trên các phiên bản Python cũ hơn, bạn có thể cài đặt nó từ phần mở rộng gõ Chúng ta có thể sử dụng nó như vậy def get_sales_summary() -> dict: ...2 Bây giờ chúng tôi có thể truy cập def get_sales_summary() -> dict: ...00 mà không cần một $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str3 def get_sales_summary() -> dict: ...4 Mypy biết rằng $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str0 là một $ python example.py Traceback (most recent call last): File "/.../example.py", line 11, in <module> print("Sales:" + sales_summary["sales"]) TypeError: can only concatenate str (not "int") to str1, vì vậy nó cho phép tệp vượt qua def get_sales_summary() -> dict: ...4 Và chúng ta có thể chạy mã mà không gặp lỗi def get_sales_summary() -> dict: ...5 Tuyệt quá VâyCảm ơn David Foster vì đã tạo ra def get_sales_summary() -> dict: ...06. Nếu bạn muốn thử kiểm tra các loại def get_sales_summary() -> dict: ...06 trong thời gian chạy, hãy xem dự án def get_sales_summary() -> dict: ...46 của anh ấy |