Python 类型提示:静态类型和注释

了解如何在 Python 中编写类型提示。提高代码质量、启用自动完成并利用 mypy 进行静态代码分析。

在编辑器中尝试

概述

Python 历史上是一种动态类型语言,这意味着解释器在运行时推断变量类型,为开发人员提供了速度和灵活性。然而,随着代码库的增长,这种动态类型的灵活性可能会导致令人困惑的运行时错误,例如将列表传递给需要字符串的函数。为了弥补这一差距,Python 3.5 引入了类型提示(类型注释),允许开发人员在代码中显式记录预期类型。

类型提示不会影响 Python 运行代码的方式;解释器在运行时完全忽略它们。相反,它们的价值在于静态分析和 IDE 工具。通过向变量、函数参数和返回类型添加类型注释,您的 IDE 可以提供精确的自动完成功能并立即标记类型不匹配错误。像“mypy”这样的工具可以在部署之前扫描您的代码库以静态捕获错误,模仿 TypeScript 或 Java 等语言的编译时检查。

Python 的打字功能非常广泛。您可以注释基本类型,如“str”、“int”和“bool”,或使用内置“typing”模块(或Python 3.9+ 中的标准集合)中的高级类型,如“list[str]”、“dict[str, int]”和“tuple[float, float]”。 “Union”(或Python 3.10+ 中的管道运算符“|”)等功能允许参数接受多种类型,而“Optional[T]”表示可以是特定类型或“None”的值。实现类型提示可以极大地提高可读性和团队协作。

代码和执行输出

使用类型注释编写函数并检查它如何接受输入。

typing_demo.py
在编辑器中尝试
# Type annotations for function parameters and return values
def greeting(name: str, count: int) -> str:
    return f"Hello {name}! " * count

# Type hints on standard collections (Python 3.9+)
user_roles: dict[str, str] = {
    "admin": "Alice",
    "moderator": "Bob"
}

message = greeting("Jane", 2)
print(message)
print(f"Roles configured: {user_roles}")
端子输出
Hello Jane! Hello Jane! 
Roles configured: {'admin': 'Alice', 'moderator': 'Bob'}

逐步实施

  • 防止大型团队代码库中的集成错误
  • 在复杂的代码项目中启用 IDE 代码完成
  • 生成自记录 API 结构和验证模式

常见问题解答

类型提示是否在运行时强制执行类型安全?

不会。如果您传递除带注释的提示之外的类型,Python 不会引发错误异常。要强制执行类型检查,您必须运行 mypy 等静态检查器。

Any 和 Union 有什么区别?

Any 禁用变量的类型检查,允许它保存任何内容。 Union(或 T | U)将变量限制为特定的、已定义的类型子集。

相关主题

推荐的 Python 资源

通过相关的交互式教程、备忘单和代码比较来扩展您的知识。