Các kiểu trong Python

Các kiểu trong Python

Bài viết này giải thích về các kiểu trong Python.

YouTube Video

Các kiểu trong Python

Module typing trong Python được sử dụng để giới thiệu gợi ý kiểu cho Python. Nó được giới thiệu lần đầu tiên trong Python 3.5 và được sử dụng để cải thiện khả năng đọc và bảo trì mã. Gợi ý kiểu không ảnh hưởng đến thời gian chạy của mã nhưng cho phép kiểm tra kiểu với các IDE và công cụ phân tích tĩnh.

Cơ bản về Gợi ý Kiểu

Gợi ý kiểu làm rõ ý định của mã bằng cách chỉ định rõ ràng kiểu của các hàm và biến. Trong ví dụ dưới đây, kiểu được chỉ định cho các tham số và giá trị trả về.

1def add_numbers(a: int, b: int) -> int:
2    return a + b
3
4result: int = add_numbers(5, 10)
5print(result)  # 15

Trong mã trên, ab thuộc kiểu số nguyên (int), và giá trị trả về của hàm cũng được chỉ định rõ ràng là một số nguyên. Ngay cả với gợi ý kiểu, các kiểu không bị áp đặt nghiêm ngặt, nhưng cảnh báo có thể được hiển thị trong khi phát triển nếu có sự không khớp kiểu.

Các Gợi ý Kiểu Chính

Module typing trong Python cung cấp nhiều lớp và hàm để định nghĩa gợi ý kiểu. Dưới đây là danh sách các gợi ý kiểu phổ biến.

  • int: số nguyên
  • str: chuỗi
  • float: số thực dấu chấm động
  • bool: giá trị logic (đúng/sai)
  • List: danh sách
  • Dict: từ điển
  • Tuple: bộ giá trị không đổi
  • Set: tập hợp

Kiểu List

Loại danh sách được chỉ định bằng lớp List. Bạn cũng có thể chỉ định rõ ràng loại của các phần tử trong danh sách.

1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4    return sum(numbers)
5
6print(sum_list([1, 2, 3]))  # 6

Trong ví dụ này, tất cả các phần tử trong danh sách được mong đợi thuộc loại int.

Loại Dict

Một loại từ điển được định nghĩa bằng Dict. Loại của key và value có thể được chỉ định.

1from typing import Dict
2
3def get_student_age(students: Dict[str, int], name: str) -> int:
4    return students.get(name, 0)
5
6students = {"Alice": 23, "Bob": 19}
7print(get_student_age(students, "Alice"))  # 23

Trong ví dụ này, từ điển sử dụng str làm loại key và int làm loại value.

Loại Tuple

Tuple được chỉ định bằng loại Tuple. Bạn có thể chỉ định loại của từng phần tử trong tuple một cách riêng lẻ.

1from typing import Tuple
2
3def get_person() -> Tuple[str, int]:
4    return "Alice", 30
5
6name, age = get_person()
7print(name, age)  # Alice 30

Ở đây, hàm get_person được hiển thị trả về một tuple chứa một chuỗi và một số nguyên.

Loại Union

Loại Union được sử dụng để chỉ rõ rằng nhiều loại kiểu dữ liệu có thể chấp nhận được.

1from typing import Union
2
3def process_value(value: Union[int, float]) -> float:
4    return value * 2.0
5
6print(process_value(10))  # 20.0
7print(process_value(3.5))  # 7.0

Trong ví dụ này, hàm process_value nhận hoặc một int hoặc float làm tham số và trả về kết quả loại float.

Loại Optional

Loại Optional được sử dụng khi một biến có thể là None. Nó được cung cấp như một cách viết tắt cho Union[Type, None].

1from typing import Optional
2
3def greet(name: Optional[str] = None) -> str:
4    if name is None:
5        return "Hello, Guest!"
6    return f"Hello, {name}!"
7
8print(greet())  # Hello, Guest!
9print(greet("Alice"))  # Hello, Alice!

Ở đây, nó cho thấy rằng khi name không được chỉ định, nó sẽ được xử lý là None.

Loại Generic

Loại Generic là một cách để biểu diễn trừu tượng loại phần tử mà một cấu trúc dữ liệu chứa. Trong module typing, bạn có thể định nghĩa loại Generic bằng cách sử dụng TypeVar.

1from typing import TypeVar, List
2
3T = TypeVar('T')
4
5def get_first_element(elements: List[T]) -> T:
6    return elements[0]
7
8print(get_first_element([1, 2, 3]))  # 1
9print(get_first_element(["a", "b", "c"]))  # a

Trong ví dụ này, get_first_element là một hàm mà trả về phần tử đầu tiên của một danh sách, và nó hoạt động không phụ thuộc vào loại của danh sách.

Bí danh loại

Một bí danh loại là một cách để đơn giản hóa định nghĩa loại phức tạp bằng cách đặt cho chúng một tên rõ ràng.

1from typing import List, Tuple
2
3Coordinates = List[Tuple[int, int]]
4
5def get_coordinates() -> Coordinates:
6    return [(0, 0), (1, 1), (2, 2)]
7
8print(get_coordinates())  # [(0, 0), (1, 1), (2, 2)]

Trong ví dụ này, một bí danh loại Coordinates được định nghĩa để dễ dàng biểu thị một loại với các tuple bên trong một danh sách.

Tóm tắt

Mô-đun typing trong Python rất hữu ích để cải thiện tính dễ đọc và khả năng duy trì của mã nguồn. Bằng cách sử dụng gợi ý kiểu đúng cách, bạn có thể giúp ngăn chặn không tương thích kiểu và lỗi, đặc biệt trong các dự án quy mô lớn hoặc phát triển nhóm. Các kiểu chỉ là một công cụ hỗ trợ phát triển và không ảnh hưởng đến hành vi lúc chạy, do đó duy trì sự linh hoạt của mã nguồn.

Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.

YouTube Video