Python 3.6+ 版本加入了对"类型提示"的支持。
这些"类型提示"是一种新的语法(在 Python 3.6 版本加入)用来声明一个变量的类型。
通过声明变量的类型,编辑器和一些工具能给你提供更好的支持。

作用

让我们从一个简单的例子开始:

def get_full_name(first_name, last_name):
    full_name = first_name.title() + " " + last_name.title()
    return full_name


print(get_full_name("john", "doe"))

运行这段程序将输出:

John Doe

这是一个非常简单的程序。现在假设你将从头开始编写这段程序。在某一时刻,你开始定义函数,并且准备好了参数…。现在你需要调用一个"将第一个字母转换为大写形式的方法"。等等,那个方法是什么来着?upper?还是 uppercase?first_uppercase?capitalize?

然后你尝试向程序员老手的朋友——编辑器自动补全寻求帮助。

输入函数的第一个参数 first_name,输入点号(.)然后敲下 Ctrl+Space 来触发代码补全。但遗憾的是并没有起什么作用:
在这里插入图片描述
添加类型提示
让我们来修改上面例子的一行代码。
我们将把下面这段代码中的函数参数从:

    first_name, last_name

改为

    first_name: str, last_name: str

这些就是"类型提示":

def get_full_name(first_name: str, last_name: str):
    full_name = first_name.title() + " " + last_name.title()
    return full_name


print(get_full_name("john", "doe"))

这时候通过 Ctrl+Space 触发自动补全,你会发现:
在这里插入图片描述

在 Python 中,类型提示(Type Hints)是一种可选的语法,用于指定变量、函数参数和返回值的预期数据类型。它的主要作用是提高代码的可读性和可维护性,同时帮助 IDE 和静态类型检查工具(如 mypy)提前发现潜在的类型错误。

基本语法

类型提示的核心是通过 : 符号指定类型,函数返回值类型则通过 -> 声明。

1. 变量的类型提示

为变量赋值时,可以在变量名后添加 : 类型 来指定其类型:

name: str = "Alice"  # 字符串类型
age: int = 30        # 整数类型
height: float = 1.75 # 浮点数类型
is_student: bool = True  # 布尔类型
2. 函数的类型提示

函数的参数和返回值都可以添加类型提示:

def add(a: int, b: int) -> int:
    return a + b
  • a: intb: int 表示参数 ab 应为整数
  • -> int 表示函数返回值应为整数

复杂类型提示

对于列表、字典、元组等复合类型,需要从 typing 模块(Python 3.9+ 也可直接用内置泛型类型)导入相关工具:

1. 列表(List)

指定列表中元素的类型:

from typing import List

numbers: List[int] = [1, 2, 3]  # 整数列表
names: List[str] = ["Alice", "Bob"]  # 字符串列表

# Python 3.9+ 可直接用 list[int]
numbers: list[int] = [1, 2, 3]
2. 字典(Dict)

指定字典的键和值的类型:

from typing import Dict

person: Dict[str, int] = {"age": 30, "height": 175}  # 键为字符串,值为整数

# Python 3.9+ 可直接用 dict[str, int]
person: dict[str, int] = {"age": 30, "height": 175}
3. 元组(Tuple)

元组的类型提示需要指定每个元素的类型(元组长度固定):

from typing import Tuple

point: Tuple[int, int] = (10, 20)  # 两个整数组成的元组
user: Tuple[str, int, bool] = ("Alice", 30, True)  # 字符串、整数、布尔值组成的元组

# Python 3.9+ 可直接用 tuple[int, int]
point: tuple[int, int] = (10, 20)
4. 可选类型(Optional)

表示变量或参数可以是指定类型或 None

from typing import Optional

def get_name(id: int) -> Optional[str]:
    if id == 1:
        return "Alice"
    return None  # 允许返回 None

# Python 3.10+ 可简化为 str | None
def get_name(id: int) -> str | None:
    ...
5. 联合类型(Union)

表示变量或参数可以是多种类型中的一种:

from typing import Union

def print_value(value: Union[int, str]) -> None:
    print(value)  # 允许传入整数或字符串

# Python 3.10+ 可简化为 int | str
def print_value(value: int | str) -> None:
    ...
6. 任意类型(Any)

表示类型不确定(不推荐过度使用,会失去类型提示的意义):

from typing import Any

def process_data(data: Any) -> Any:
    return data  # 接受任意类型,返回任意类型

类作为类型

你也可以将类声明为变量的类型。
假设你有一个名为 Person 的类,拥有 name 属性:

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

def get_person_name(one_person: Person):
    return one_person.name

接下来,你可以将一个变量声明为 Person 类型:

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


def get_person_name(one_person: Person):
    return one_person.name

类型提示的特点

  1. 可选性:Python 解释器不会强制检查类型,即使类型不匹配也能运行(动态类型特性仍保留)。
  2. 工具支持:IDE(如 PyCharm、VS Code)会根据类型提示提供自动补全和错误提示;静态检查工具(如 mypy)可手动检查类型错误。
  3. 兼容性:从 Python 3.5 开始支持,后续版本不断扩展(如 3.9 的内置泛型、3.10 的联合类型简化语法)。

实际应用价值

  • 提高可读性:代码使用者能快速了解函数参数和返回值的预期类型。
  • 减少错误:通过工具提前发现类型不匹配的问题(如给需要整数的函数传入字符串)。
  • 便于维护:重构代码时,类型提示能帮助确认修改是否影响其他部分。

例如,使用 mypy 检查以下代码:

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

result = add("1", 2)  # 错误:传入字符串而非整数

运行 mypy script.py 会提示类型错误,帮助提前定位问题。

总之,类型提示是 Python 提升代码健壮性的重要工具,尤其适合大型项目或团队协作。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐