![]() |
1
3
mypy做了一些非常高级的类型推断。通常,您不需要注释变量。mypy文档[1]说的是推断:
一般经验法则是“注释变量,其类型在初始赋值时不可推断”。 下面是一些例子:
当然还有更多的案例。 在您的示例中,mypy可以推断表达式的类型。 [一] https://mypy.readthedocs.io/en/latest/type_inference_and_annotations.html |
![]() |
2
3
mypy(通常是pep 484)的设计是为了在最理想的情况下,只需要向代码的“边界”或“接口”添加类型注释。 例如,基本上必须在以下位置添加注释/类型元数据:
这些都是代码“边界”的例子。参数/返回类型的类型提示让函数的调用者确保他们正确地调用了它,字段的类型提示让调用者知道他们正确地使用了对象,等等…… mypy(和其他符合pep 484的工具)将使用这些信息并尝试 推断 其他一切的类型。这种行为被设计成大致模仿人类阅读代码的方式:例如,一旦知道传入的类型,通常很容易理解其余代码的作用。 毕竟,python是一种从一开始就被设计成可读的语言!我们不需要到处散布类型提示来增强对代码功能的理解。 当然,mypy(和其他符合pep 484的工具)并不完美,有时它们可能无法正确地推断某些局部变量的类型。在这种情况下,您可能需要添加一个类型提示来帮助mypy。 Ethan's answer 对一些需要注意的常见情况进行了很好的概述。(有趣的是,这些案例也往往是 人类 读者可能很难理解您的代码!) 因此,综合考虑,总的建议是:
所以,回到你的例子,你会
不
在两种情况下都添加类型提示。一个人类读者和Mypy都能看出
同样的,你会
不
将批注添加到
|
![]() |
3
1
对我来说,它开始在任何可能的地方编写类型提示。它一点也不慢,如果您在功能中返回到以前的代码,则会更容易。因此,现在除了python文件的大小之外,尽可能多地使用它们是一个消极的方面。 |
![]() |
Keji Li · 如何将函数参数键入为本机函数 6 年前 |
![]() |
ttyridal · 如何引用函数的类型提示 6 年前 |
![]() |
Joseph Yourine · 实现返回双精度的方法:不匹配 7 年前 |
![]() |
Matt · 函数[duplicate]的类型提示是什么 7 年前 |