我注意到 Python 3.5 和 Python 3.6 添加了很多关于静态类型检查的功能,所以我尝试使用以下代码(在 python 3.6 中,稳定版本)。
from typing import List
a: List[str] = []
a.append('a')
a.append(1)
print(a)
令我惊讶的是,Python 没有给我错误或警告,尽管 1
被附加到一个只应包含字符串的 list
中。 Pycharm
检测到类型错误并给了我一个警告,但它并不明显,也没有显示在输出控制台中,我担心有时我可能会错过它。我想要以下效果:
- 如果很明显我使用了错误的类型,如上所示,抛出警告或错误。
- 如果编译器无法可靠地检查我使用的类型是对还是错,请忽略它。
这可能吗?也许 mypy
可以做到,但我更愿意使用 Python-3.6 风格的类型检查(如 a: List[str]
)而不是注释风格 (就像在 mypy
中使用的 # type List[str]
) 一样。而且我很好奇在原生python 3.6中是否有一个开关来实现我上面说的两点。
最佳答案
类型提示完全被 Python 运行时忽略,并且仅由 mypy 和 Pycharm 的集成检查器等第 3 方工具检查。还有各种鲜为人知的第 3 方工具使用类型注释在编译时或运行时进行类型检查,但大多数人使用 mypy 或 Pycharm 的集成检查器 AFAIK。
事实上,我怀疑在可预见的 future 类型检查是否会被集成到 Python 中——参见 PEP 484 的“非目标”部分(引入了类型注释)和 PEP 526 (其中引入了变量注解),以及Guido的评论here .
我个人很乐意将类型检查与 Python 更紧密地集成在一起,但似乎整个 Python 社区都没有准备好或愿意接受这样的改变。
最新版本的 mypy 应该能理解 Python 3.6 变量注释语法和注释式语法。事实上,变量注释基本上是 Guido 的想法(Guido 目前是 mypy 团队的一员)——基本上,mypy 和 Python 中对类型注释的支持几乎是同时开发的。
关于python - 如何在 python 3.6 中使用类型提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51623839/