欢迎光临
我们一直在努力

Python 类型注解

文章目录

    • 一、什么是 Python 类型注解?
    • 二、为什么要写类型注解?
      • 1️⃣ IDE 智能提示直接起飞 🚀
      • 2️⃣ 提前发现 bug(静态检查)
      • 3️⃣ 大型项目必备(尤其是多人协作)
    • 三、基础类型注解
      • 1️⃣ 内置基础类型
      • 2️⃣ 容器类型(Python 3.9+ 推荐写法)
    • 四、函数类型注解(重点)
      • 1️⃣ 参数 + 返回值
      • 2️⃣ 没有返回值
      • 3️⃣ 可选参数(Optional)
    • 五、Union / Literal / Any
      • 1️⃣ Union(多种类型之一)
      • 2️⃣ Literal(字面量类型)
      • 3️⃣ Any(慎用)
    • 六、类型别名(让类型更可读)
    • 七、TypedDict(字典结构约束)
    • 八、Class & 方法类型注解
    • 九、泛型(进阶但很香)

Python 是动态语言,但这并不意味着你只能“随缘写代码”。

从 Python 3.5 开始,类型注解(Type Hints) 正式进入语言核心。 它不影响运行时,却能极大提升:

  • 可读性
  • IDE 智能提示
  • 静态检查能力
  • 大型项目的可维护性

一、什么是 Python 类型注解?

最直观的理解:

给变量、函数参数、返回值“贴标签”,告诉人和工具:这是什么类型

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

  • a: int:参数类型
  • -> int:返回值类型

⚠️ 重要:类型注解不会影响运行

add("1", "2") # 运行时不会报错

Python 解释器不会检查类型,检查的是工具(IDE / mypy / pyright)。

二、为什么要写类型注解?

1️⃣ IDE 智能提示直接起飞 🚀

def get_name(user: dict) > str:
return user["name"]

IDE 能帮你:

  • 自动补全
  • 参数提示
  • 重构安全

2️⃣ 提前发现 bug(静态检查)

def sum_list(nums: list[int]) > int:
return sum(nums)

sum_list(["1", "2"]) # ❌ 静态检查直接报错

运行前就能发现问题,而不是等到线上炸。

3️⃣ 大型项目必备(尤其是多人协作)

  • 不用翻实现
  • 看签名就知道怎么用
  • 类似 TypeScript 对 JavaScript 的价值

三、基础类型注解

1️⃣ 内置基础类型

name: str = "Alice"
age: int = 18
height: float = 1.72
is_admin: bool = False

2️⃣ 容器类型(Python 3.9+ 推荐写法)

numbers: list[int] = [1, 2, 3]
user: dict[str, str] = {"name": "Tom"}
tags: set[str] = {"python", "typing"}
point: tuple[int, int] = (10, 20)

👉 Python 3.9 之前写法

from typing import List, Dict, Tuple

numbers: List[int]

四、函数类型注解(重点)

1️⃣ 参数 + 返回值

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

2️⃣ 没有返回值

def log(msg: str) > None:
print(msg)

None ≠ 没写返回值 👉 表示“明确不返回任何东西”

3️⃣ 可选参数(Optional)

from typing import Optional

def get_user(id: int) > Optional[str]:
if id == 0:
return None
return "Tom"

等价写法(Python 3.10+)👇

def get_user(id: int) > str | None:
...

五、Union / Literal / Any

1️⃣ Union(多种类型之一)

from typing import Union

def parse_id(id: Union[int, str]) > int:
return int(id)

Python 3.10+:

def parse_id(id: int | str) > int:
return int(id)

2️⃣ Literal(字面量类型)

from typing import Literal

def set_theme(theme: Literal["light", "dark"]) > None:
...

👉 适合 配置项 / 状态值

3️⃣ Any(慎用)

from typing import Any

def parse(data: Any) > Any:
return data

⚠️ Any = 放弃类型检查 👉 不到万不得已别用

六、类型别名(让类型更可读)

User = dict[str, str]

def get_user() > User:
return {"name": "Tom"}

复杂类型尤其有用:

Response = dict[str, int | str | bool]

七、TypedDict(字典结构约束)

普通 dict 太宽松?

from typing import TypedDict

class User(TypedDict):
id: int
name: str
active: bool

def get_user() > User:
return {
"id": 1,
"name": "Tom",
"active": True
}

👉 非常适合:

  • JSON
  • API 返回值
  • 配置对象

八、Class & 方法类型注解

class UserService:
def __init__(self, name: str):
self.name: str = name

def get_name(self) > str:
return self.name

九、泛型(进阶但很香)

from typing import TypeVar, Generic

T = TypeVar("T")

class Box(Generic[T]):
def __init__(self, value: T):
self.value = value

def get(self) > T:
return self.value

使用:

box = Box
box.get() # 推断为 int

👉 类似 TypeScript 泛型


扩展资源:

  • Python 官方 typing 模块文档
  • mypy 文档
  • Python 类型提示指南
  • Real Python 类型提示教程

👉点击进入我的网站

赞(0)
未经允许不得转载:171主机测评 » Python 类型注解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址