0Pricing
Python Academy · 课时

类型注解基础

为变量、函数参数和返回值类型添加注解。

类型注解基础 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

什么是类型注解

类型注解用于声明变量、参数和返回值的预期类型。它们不会在运行时强制执行,而是由 mypy 等类型检查器读取。

def greet(name: str) -> str:
    return f"Hello, {name}"

result: str = greet("Alice")
print(result)

变量注解

在模块级、类级或局部变量后添加冒号和类型,即可为变量添加注解。

count: int = 0
pi: float = 3.14159
name: str = "Python"
flag: bool = True

# Annotation without assignment (declaration only)
future_value: int

函数参数注解

在函数签名中为每个参数添加注解。使用 -> type 为返回类型添加注解。

def add(a: int, b: int) -> int:
    return a + b

def repeat(text: str, times: int = 1) -> str:
    return text * times

def no_return() -> None:
    print("side effect only")

内置集合类型(Python 3.9+)

从 Python 3.9 开始,可以直接将小写的内置类型用作泛型:list[int]、dict[str, int] 和 tuple[int, ...]。

def total(numbers: list[int]) -> int:
    return sum(numbers)

def config() -> dict[str, str]:
    return {"host": "localhost", "port": "8080"}

def coords() -> tuple[float, float]:
    return (1.0, 2.0)

可选类型与联合类型

X | None(Python 3.10+)或 Optional[X] 表示值可以是 X 或 None。X | Y 表示值可以是 X 或 Y。

from typing import Optional

def find(items: list[int], target: int) -> int | None:
    return next((x for x in items if x == target), None)

# Older style:
# def find(...) -> Optional[int]:

联合类型

int | str(Python 3.10+)或 Union[int, str] 用于注解可能属于多种类型之一的值。

from typing import Union

def process(value: int | str) -> str:
    return str(value)

# Older style:
# def process(value: Union[int, str]) -> str:

类型别名

将类型表达式赋给一个名称,即可创建可重复使用的别名,从而提高可读性。

from typing import TypeAlias

Vector: TypeAlias = list[float]
Matrix: TypeAlias = list[Vector]

def dot(a: Vector, b: Vector) -> float:
    return sum(x * y for x, y in zip(a, b))

Callable 注解

使用 Callable[[arg_types], return_type] 为作为参数传入的函数添加注解。

from typing import Callable

def apply(func: Callable[[int, int], int], x: int, y: int) -> int:
    return func(x, y)

result = apply(lambda a, b: a + b, 3, 4)
print(result)  # 7

标注 *args 和 **kwargs

为 *args 标注元素类型(而不是元组类型),为 **kwargs 标注值的类型。

def log(*messages: str, level: str = "INFO") -> None:
    for msg in messages:
        print(f"[{level}] {msg}")

def configure(**options: int) -> None:
    for key, val in options.items():
        print(f"{key}: {val}")

from __future__ import annotations

在文件顶部添加此导入语句,以启用注解的延迟求值,从而无需使用引号即可表示前向引用。

from __future__ import annotations

class Node:
    def __init__(self, value: int, next: Node | None = None):
        self.value = value
        self.next = next   # forward ref to Node works here

TYPE_CHECKING 保护机制

仅在类型检查期间(而不是运行时)导入类型,以避免循环导入或导入开销较大的模块。

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from mymodule import HeavyClass

def process(obj: HeavyClass) -> None:
    ...   # HeavyClass not imported at runtime

快速检查

哪种注解语法表示函数不返回任何内容?

回顾

使用 name: Type 注解变量,使用 param: Type 注解参数,使用 -> Type 注解返回值。使用 list[T]、dict[K,V](Python 3.9+)和 X | None(3.10+),并使用 from __future__ import annotations 表示前向引用。

常见问题解答

「类型注解基础」课时是免费的吗?

是的 — 「类型注解基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「类型注解基础」这节课中我会学到什么?

为变量、函数参数和返回值类型添加注解。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「类型注解基础」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 类型注解基础
  2. 复杂类型:List、Dict、Optional、Union
  3. TypeVar、泛型类与 Protocol
  4. 运行 mypy 与修复类型错误
← 返回 Python Academy