Danh sách gợi ý loại Python của từ điển

Chúng ta đã thấy cách chú thích các biến với các kiểu dữ liệu cơ bản như int, str, bool, v.v. Tuy nhiên, trong các ứng dụng trong thế giới thực, chúng tôi làm việc với các cấu trúc dữ liệu nâng cao như danh sách, bộ dữ liệu, từ điển, v.v. Để chú thích các biến với các cấu trúc Dữ liệu này, chúng tôi không thể sử dụng chúng trực tiếp cho đến Python 3. 9. Python đã giới thiệu mô-đun gõ cho các ứng dụng này

Chúng có thể được hiểu rõ nhất bằng cách sử dụng các ví dụ. Hãy xem xét những cái phổ biến nhất

1. Chú thích với các cấu trúc dữ liệu đơn giản

# For python version  Union[float,None]:
    try:
        conversion_factor = 75
        value = value/conversion_factor
        return value
    except TypeError:
        return None

inr_to_usd['23']

Nếu chúng ta thử gọi hàm inr_to_usd với một giá trị chuỗi và chạy một trình kiểm tra kiểu tĩnh như mypy, thì nó sẽ cho chúng ta biết

[env] C:\v2\basics\type_hints> mypy .\type_hints.py
1_type_hints.py:41: error: Argument 1 to "inr_to_usd" has incompatible type "str"; expected "float"
Found 1 error in 1 file [checked 1 source file]

Có một cách tắt mặc dù cho mẫu này. Chúng ta có thể viết Optional[float] chính xác như Union[float. Không có]

3. Loại tùy chỉnh
Nếu gợi ý loại của bạn trở nên quá dài, thì sẽ rất khó đọc và hiểu chức năng. Trong những trường hợp như vậy, chúng tôi có thể trích xuất chú thích loại và xây dựng loại tùy chỉnh của riêng mình. Hãy xem một ví dụ về điều này

from typing import List 

Image = List[List[int]]

def flatten_image[image: Image]->List:  #custom type Image
    flat_list = []
    for sublist in image:
        for item in sublist:
            flat_list.append[item]
    return flat_list

image = [[1,2,3],[4,5,6]]

Lưu ý cách chúng tôi trích xuất danh sách danh sách các số nguyên và xây dựng loại tùy chỉnh của riêng chúng tôi có tên là Hình ảnh
Nó không đẹp và sạch sẽ sao? . Thử một lần đi

from typing import Optional

class Job:
    def __init__[self,title:str,description:Optional[str]] -> None:
        self.title = title
        self.description = description

    def __repr__[self]:
        return self.title


job1 = Job[title="SDE2",description="Sdfdk"]
job2 = Job[title="Senior Manager", description="jfjdj"]

jobs: List[Job] = [job1,job2]     #notice the List[Job] , Job is our custom class

4. Chú thích chức năng với callables
Cá nhân tôi sử dụng mẫu trang trí rất nhiều. Trình trang trí về cơ bản là một chức năng bao bọc một chức năng khác và thêm chức năng bổ sung cho nó. Điều này tương tự như đóng gói một món quà. Trình trang trí hoạt động như một trình bao bọc. Dưới đây, chúng ta có một hàm chia đơn giản, nhưng phép chia cho 0 là không thực tế. Những gì chúng ta có thể làm là trang trí hàm chia bằng một hàm khác có thể xử lý trường hợp chia hết cho 0

def smart_divide[func]:
    def inner[a, b]:
        if b == 0:
            print["Whoops! Division by 0"]
            return None

        return func[a, b]
    return inner


@smart_divide
def divide[a, b]:
    print[a/b]

divide[9, 0]

Nếu chúng ta muốn chú thích tham số func thì chúng ta có thể sử dụng lớp Callable. Điều này sẽ giúp các nhà phát triển khác hiểu chữ ký của tham số func

________số 8_______

Phần Callable[[int,int],float] có nghĩa là tham số func mong đợi 2 giá trị số nguyên và trả về 1 số dấu phẩy động

Có nhiều chủ đề khác trong gợi ý kiểu, ví dụ: generics, typevar, v.v. Tuy nhiên, tôi đã cố gắng bao gồm các mẫu phổ biến nhất và chúng sẽ đủ cho 99% trường hợp

Chủ Đề