Chuyển đến nội dung chính
Mô-đun 9 · Bài học 1 trong tổng số 433/36 trong khóa học~12 min
Bài học theo mô-đun (1/4)

Gợi ý gõ: các loại chú thích

Gợi ý loại (chú thích loại) là khai báo tùy chọn cho biết "biến/tham số này có loại X". Python KHÔNG xác minh chúng khi chạy: chúng dành cho bạn, trình soạn thảo của bạn (tự động hoàn thành!) và các công cụ như mypy hoặc pyright thực hiện kiểm tra kiểu tĩnh.

Chú thích các biến

Python
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]

Cú pháp là name: type = value. Không có giá trị thì đó là một khai báo thuần túy:

Python
risultato: int  # nessuna assegnazione, solo "annuncio del tipo"

Chức năng chú thích

Python
def saluta(nome: str, urlante: bool = False) -> str:
    s = f"Ciao {nome}"
    return s.upper() if urlante else s

def somma(numeri: list[int]) -> int:
    return sum(numeri)

Cú pháp: param: type cho mỗi tham số, -> type cho kết quả trả về. Hàm không trả về gì sẽ sử dụng -> None.

Các loại chung tích hợp (Python 3.9+)

Python
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}

Tùy chọn và Liên minh

Giá trị có thể là None:

Python
def trova_utente(id: int) -> str | None:
    if id == 1:
        return "Ada"
    return None

X | None là cú pháp hiện đại (Python 3.10+). Tương đương: Optional[X] từ typing. Đối với các kết hợp nhiều loại: int | str | float.

đánh máy: công cụ hữu ích

Python
from typing import Any, Callable

def applica(f: Callable[[int], int], x: int) -> int:
    return f(x)

valore: Any = "qualunque cosa"  # disabilita il check
  • Any = "không kiểm tra" (sử dụng tiết kiệm).
  • Callable[[arg1, arg2], return] = hàm lấy các tham số đó và trả về loại đó.

mypy: trình kiểm tra kiểu

Bạn cài đặt mypy, chạy mypy file.py và nó sẽ cho bạn biết liệu các loại có xếp hàng hay không:

Bash
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"

Kiểm tra các loại với mypy

Gợi ý kiểu của Python không được trình thông dịch thực thi trong thời gian chạy; chúng bị bỏ qua trong quá trình thực hiện. Để xác thực tính chính xác của loại, bạn phải chạy công cụ phân tích tĩnh bên ngoài như mypy bằng cách thực thi lệnh mypy script.py trong thiết bị đầu cuối của mình.

Hãy tự mình thử

tập thể dục#python.m9.l1.e1
Nỗ lực: 0Đang tải…

Xác định hàm `double(numbers: list[int]) -> list[int]` trả về một danh sách với mỗi phần tử nhân với 2. Gọi nó bằng [1, 2, 3] và gán cho `r`. Đánh giá `r`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng khả năng hiểu danh sách hoặc vòng lặp for.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#python.m9.l1.e2
Nỗ lực: 0Đang tải…

Xác định `first_or_none(items: list[int]) -> int | None` trả về phần tử đầu tiên nếu danh sách không trống, nếu không thì Không. Gán `a = first_or_none([10, 20])` và `b = first_or_none([])`. Đánh giá `(a, b)`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

`if items` là đúng khi danh sách KHÔNG trống.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#python.m9.l1.e3
Nỗ lực: 0Đang tải…

Write a function `double_value(n: int) -> int` that takes an integer, multiplies it by 2, and returns the result. Make sure to specify type hints for both the parameter and the return value. Finally, evaluate `double_value(5)`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng n: int làm tham số và -> int sau chữ ký hàm.

Giải pháp khả dụng sau 3 lần thử